Argument Übergabe
Argument Übergabe via Register
-
Für die Übergabe von Integer werden (in dieser Reihenfolge) die Register %rdi, %rsi, %rdx, %rcx, %r8 und %r9 benutzt.
-
Für die Übergabe von Fließkomma Zahlen (Intel Bezeichnung SSE) werden (in dieser Reihenfolge) die Register %xmm0 bis %xmm7 benutzt.
Falls die Register nicht ausreichen werden weitere Argumente über den Stack übergeben.
Funktionsdeklaration: Sonderfall
Was ist der Unterschied zwischen der Funktionsdeklaration
f();
und
f(void);
Lokale Variablen
Ist es ineffizienter, wenn man Variablen in Blöcken (z.B. einem if-Block) definiert? Sollte man also lieber alles zu Beginn der Funktion definieren, wie hier:
f(void)
{
int cond;
int i;
// ... do something ..
if (cond>0) {
// ... do something ...
}
}
Schöner zum Programmieren ist es, wenn man die Variablen erst da definiert wo man sie braucht. Wenn man viele Blöcke hat und aus jedem Block die Definition nach oben zieht hat man Definitionen der Art i1, i2, ... i10 am Anfang der Definition. Das ist unleserlicher Code und ist damit fehleranfälliger als lesbarer Code. Man will also eher solchen Code:
f(void)
{
int cond;
// ... do something ..
if (cond>0) {
int i;
// ... do something ...
}
}
Wieso könnte der zweite Code ineffizienter sein? Ist er es?