Qual è la rappresentazione fisica dell'heap e dello stack?


9

Posso facilmente capire come .bss e il codice hanno rappresentazioni fisiche nel processore che ha un banco di memoria per le istruzioni che un contatore di programmi può contare e il bss (simbolo di inizio blocco) sono solo dati globali. Ma poi c'è lo stack per le variabili locali e l'heap per la memoria dinamica. Come vengono messe fisicamente queste cose sul circuito?

Risposte:


6

Nota: mi riferisco principalmente a x86 poiché ne ho più familiarità ed è ampiamente documentato:

Su x86 (e la maggior parte delle altre architetture) lo stack è semplicemente residente in memoria come tutto il resto. Il processore manipola lo stack tramite un puntatore, che di solito è memorizzato in un registro (il puntatore dello stack). Le istruzioni push e pop cambieranno il valore del puntatore dello stack, cambiando la posizione della parte superiore dello stack.

L'heap è un'astrazione del software . Come suggerisce il nome, è solo un grumo di RAM che un allocatore suddivide e distribuisce i puntatori. In termini fisici, l'heap non sembra diverso da qualsiasi altra parte della RAM.

Il paging e la segmentazione sono tuttavia correlati tangenzialmente all'heap. Hanno principalmente a che fare con il multi-tasking, dove i processi non possono essere autorizzati a modificare la RAM che non possiedono esplicitamente.


3
Il paging riguarda più la gestione della memoria in generale - l'unità su cui la memoria fisica è mappata su un indirizzo logico - che le restrizioni di accesso, anche se le successive tendono ad essere applicate come funzionalità aggiuntiva dell'unità di gestione della memoria.
Chris Stratton,

4

Logicamente parlando lo stack e heap sono di solito solo memoria; a livello di implementazione, però, si spera che vengano serviti principalmente dalla cache. Nella maggior parte dei sistemi ci arrivano dinamicamente tramite algoritmi di memorizzazione nella cache, ma ci sono stati sistemi che supportano la posizione esplicita nella cache o altra memoria più veloce del solito, e probabilmente anche quelli che supportano lasciando suggerimenti che particolari dati dovrebbero avere la priorità preferenziale per il posizionamento lì come permessi di spazio.

La progettazione di software di basso livello e di generatori di codici del compilatore si spera che tenga conto dell'organizzazione dell'accesso ai dati che probabilmente porterà a un buon utilizzo della cache, rispetto ai costanti errori della cache.

Alcuni processori hanno un registro degli indirizzi di ritorno, che funziona come una sorta di cache dello stack esplicita a una profondità (probabilmente ci sono anche quelli con più stack hardware profondi, anche se gli esempi non vengono in mente).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.