Blaubart: Verständnisfrage zum Speicher

Beitrag lesen

Ähm... möglicherweise war diese Erklärung etwas _zu_ knapp. Deshalb nochmal etwas ausführlicher:

Wenn du die Variablen in der Reihenfolge...

int a;
int b;

... anlegst, landen sie -- wie Martin schon erwähnte -- meist direkt hintereinander im Speicher. Der Stackpointer wandert beim Hinzufügen von Werten auf den Stack zu den _niedrigeren_ Speicheradressen hin. Wird also beim Eintritt in deine Funktion ein Stackframe angelegt, in dem auch die lokalen Variablen enthalten sind, liegen die eher angelegten Variablen bei höheren Speicheradressen:

pushl %ebp
movl  %esp, %ebp
subl  $4, %esp    ; int a
subl  $4, %esp    ; int b

(Das wird üblicherweise natürlich in einem Schritt ausgeführt: subl $8, %esp.)

Wenn du nun &b - &a berechnest, ziehst du also eine größere Zahl von einer (um vier) kleineren ab.