Lo stack cresce "verso il basso", vale a dire da indirizzi elevati a indirizzi bassi. Nel diagramma dello stack che dovresti riempire, gli indirizzi sono "invertiti" (l'indirizzo 0x00000004 è sotto indirizzo 0x00000000, non sopra di esso), quindi in quel diagramma , lo stack cresce "su".
(Il punto di comprendere qui è che non vi è alcuna nozione di gravità nel computer, i "su" e "giù" sono relativi a una direzione convenzionale, che può essere quella di un tavolo su un pezzo di carta, o quello dei valori degli indirizzi a crescita numerica, o quant'altro.Qualora, la tabella indica esplicitamente gli indirizzi, con le frecce che confermano la convenzione.)
Quindi la parola 0x12ab34cd (variabile locale a
) dovrebbe apparire agli indirizzi da 0x00000014 a 0x00000017, immediatamente sopra il puntatore del frame memorizzato. L'array buffer
è quindi immediatamente sopra (indirizzi da 0x00000008 a 0x00000013).
Mentre lo stack cresce verso indirizzi "bassi" (il puntatore dello stack è decrementato quando un valore viene inserito nello stack), il buffer viene ordinato verso indirizzi "alti" ( buffer[0]
è a indirizzo 0x00000008, buffer[11]
è all'indirizzo 0x00000013).
Che la macchina sia "big-endian" conta solo per l'ordine dei byte all'interno di una singola parola. Non ha alcun impatto sull'ordine di comparsa delle parole all'interno dello stack. Detto altrimenti, che lo stack è "in crescita" non è una conseguenza del fatto che la macchina sia "big-endian".
(Nota: ci sono state alcune architetture con stack "in crescita" ma sono abbastanza rari in questi giorni, e l'esercizio non avrebbe senso con uno stack "in crescita".)