Copy by Value - Wann fängt der konstante Wert zu existieren an?
-
void aufrufer(){ aufgerufen(3); // Hier wird die Konstante 3 zum Ersten mal erwähnt } void aufgerufen(int i){ // ...};
Da die Konstante 3 unveränderlich ist, würde ich gerne wissen,
ob diese Konstante zuerst in der Funktion aufrufer() zu existieren anfängt und dann bei der Übergabe eine Kopie in aufgerufen() erstellt wird, wie es
bei einer verändlicheren Variable üblich wäre,
oder ist es so, dass der Compiler einfach so schlau ist und die Konstante 3 erst in der aufgerufen Funktion erstellt?Und noch eine Frage, ist Copy by Reference immer schneller als ein Copy by Value oder gibt es auch Fälle in dem das nicht so ist?
-
Undefiniert. Aller wahrscheinlichkeit nach steht der Wert aber direkt in der executable.
-
Copy by Value schrieb:
Und noch eine Frage, ist Copy by Reference immer schneller als ein Copy by Value oder gibt es auch Fälle in dem das nicht so ist?
Du meinst Call by Value bzw. Reference.
Faustregel: Wenn
sizeof(parameter)<=sizeof(void*)
, dann nimm call by value, ansonsten call by reference (in C eher call by pointer).
-
call by name schrieb:
Copy by Value schrieb:
Und noch eine Frage, ist Copy by Reference immer schneller als ein Copy by Value oder gibt es auch Fälle in dem das nicht so ist?
Du meinst Call by Value bzw. Reference.
Äh ja, sorry. Ich meine natürlich Call by Value bzw. Referenz.
(Meinen Nicknamen lasse ich jetzt mal so stehen wie er war)Faustregel: Wenn
sizeof(parameter)<=sizeof(void*)
, dann nimm call by value, ansonsten call by reference (in C eher call by pointer).Okay, Danke. Werde ich dann so machen.