Cand gcc-ul compileaza o functie, primul lucru pe care il face functia e
sa scada o anumita valoare din registrul ESP, pentru a face loc
variabilelor locale. Aceasta valoare care este scazuta este intotdeauna
>= decat dimensiunea variabilor, dar as fi curios sa aflu dupa ce
algoritm decide gcc-ul cu cat sa fie mai mare.
Exemplu: Am urmatoarea secventa de cod in C:
---start------------------
void f1() {
char d[3];
}
void f2() {
char d[4];
}
---end--------------------
Assembly output-ul pentru functiile f1 si f2 este (gcc -S test.c):
---start------------------
f1:
pushl %ebp
movl %esp, %ebp
subl $24, %esp
leave
ret
f2:
pushl %ebp
movl %esp, %ebp
subl $4, %esp
leave
ret
---end--------------------
As dori sa aflu de ce se scade 24 cand variabila locala are 3 octeti si
4 cand variabila are 4 octeti.
---
Detalii despre listele noastre de mail: http://www.lug.ro/