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/


Raspunde prin e-mail lui