Ho questo pezzo di codice in c:Lo stack cresce verso l'alto o verso il basso?
int q = 10;
int s = 5;
int a[3];
printf("Address of a: %d\n", (int)a);
printf("Address of a[1]: %d\n", (int)&a[1]);
printf("Address of a[2]: %d\n", (int)&a[2]);
printf("Address of q: %d\n", (int)&q);
printf("Address of s: %d\n", (int)&s);
Il risultato è:
Address of a: 2293584
Address of a[1]: 2293588
Address of a[2]: 2293592
Address of q: 2293612
Address of s: 2293608
Quindi, vedo che dal a
a a[2]
, indirizzi di memoria aumenta di 4 byte. Ma da q
a s
, gli indirizzi di memoria diminuiscono di 4 byte.
Mi chiedo 2 cose:
- Vuol pila crescere o verso il basso? (Sembra che sia per me in questo caso)
- Che succede tra gli indirizzi di memoria
a[2]
eq
? Perché c'è una grande differenza di memoria lì? (20 byte).
Nota: questa non è una domanda per i compiti. Sono curioso di sapere come funziona lo stack. Grazie per qualsiasi aiuto.
L'ordine è arbitrario. Probabilmente il gap è quello di memorizzare un risultato intermedio come & q o & s - guarda lo smontaggio e guarda tu stesso. –
Sono d'accordo, leggere il codice assembly. Se stai facendo questo tipo di domande è ora di imparare a leggerlo. –
questo codice non ha nulla a che fare con lo stack. – specializt