Call-by-value
Call-by-value, Art der Argumentübergabe. Beim Aufruf wird eine
Kopie des übergebenen Wertes im lokalen Speicher des Unterprogramms
angelegt.
Eine Veränderung des Wertes innerhalb des Unterprogramms hat
keine Auswirkung auf den Wert im aufrufenden Programmteil.
Nachteil der Call-by-value-Übergabe von Argumenten ist, daß stets
eine Kopie des übergebenen Objektes angelegt wird. Dazu muß Speicher reserviert und der Speicherinhalt
kopiert werden. Bei größeren Datenstrukturen oder häufig aufgerufenen
Unterprogrammen kann dies viel Rechenzeit und Speicherplatz
verschlingen.
Beispiele für Sprachen mit Call-by-value Übergabe von Argumenten:
PASCAL, C, C++
Call-by-reference, häufigste Art der Argumentübergabe. Der
übergebene Wert wird nicht in einen neuen Speicherbereich kopiert, sondern
es wird lediglich die Adresse des die Daten enthaltenden
Speicherbereiches übergeben. Unterprogramm und aufrufendes Programm
verwenden denselben Speicherbereich.
Eine Veränderung des Arguments im Unterprogramm modifiziert
den Wert im aufrufenden Programm,
sofern nicht im Unterprogramm die Argumente als konstant definiert
werden. Dies ist eine große Gefahr von Call-by-reference.
Call-by-reference ist die effizienteste Art, Daten zu übergeben, da
keine Speicherbereiche (außer dem Speicherbereich, der die Adresse
des Wertes enthält) kopiert werden müssen.
Call-by-reference kann bei allen höheren Programmiersprachen
realisiert werden. Standard ist sie beispielsweise in FORTRAN. In PASCAL
oder C++ muß Call-by-reference explizit angegeben werden.
In C gibt es keine Call-by-reference-Parameter! Diese müssen
über Zeiger simuliert werden.
Die Möglichkeit der Auswahl zwischen Call-by-value und Call-by-reference
trägt entscheidend zur Datenintegrität im aufrufenden Programmteil bei.
Stack, Speicherbereich zur temporären Speicherung lokaler Variablen
in Programmmodulen. Funktioniert nach dem Prinzip last-in-first-out.
Daten werden immer oben auf den Stapel (engl. stack) abgelegt und müssen später
in umgekehrter Reihenfolge wieder entfernt werden.