Nota: questa pagina è stata aggiornata: vedere gestione_della_memoria
Un programma in esecuzione viene chiamato processo. Il file eseguibile, prima dell'esecuzione, viene trasferito dalla memoria di massa alla memoria centrale. Nella memoria centrale il file eseguibile è diviso in sezioni (section): text section, data setion e stack section. Durante il trasferimento, le sezioni vengono scomposte in segmenti(segment) (anche non contigui tra loro)
Un segmento rappresenta un'area di memoria contigua pari a 64 kB
Area che contiene le istruzioni eseguibili e le costanti. Durante l'esecuzione del programma l'area è di dimensione fissa e di sola lettura.
area che contiene le variabili cosiddette globali e quelle statiche che sono state inizializzate dal programmatore. È di dimensione costante nel tempo, ma _non_ è di sola lettura, poiché è possibile modificare i valori delle variabili in runtime. Le variabili in quest'area sono visibili a tutte le funzioni per tutta la durata del programma.
(Block Started by Symbol) area che contiene le variabili cosiddette globali e quelle statiche che _non_ sono inizializzate dal programmatore e che quindi vengono inizializzate a zero dal compilatore. Le altre caratteristiche sono identiche a quelle del Data Segment (vedere l'inizializzazione delle variabili…)
Significa letteralmente mucchio. È detta anche memoria dinamica perché all'interno di questa area (di dimensione non fissa) lo spazio viene riservato e liberato dinamicamente, sotto il controllo del programmatore, cioè, a seconda delle richieste e delle istruzioni presenti nel programma, durante l'esecuzione. Per questi compiti il programmatore usa l'operatore new e l'operatore delete.
Significa letteralmente pila. Come in una pila, gli elementi che compongono lo stack vengono riservati e liberati in ordine inverso. È detta anche memoria automatica perché la gestione è automatica, sotto il controllo del sistema operativo. Lo stack contiene le variabili cosiddette locali e i parametri dichiarati nell'ambito dell'esecuzione di una funzione. Le variabili presenti in questa area sono visibili solo alle rispettive funzioni e solo per l'intervallo di tempo necessario alla funzione. Ogni elemento viene liberato automaticamente al termine della funzione.
Una variabile locale (nello stack) ha una vita pari a quella del periodo di esecuzione della funzione. Una variabile allocata dinamicamente (nell'heap) con l'operatore new può avere una vita anche più lunga, perché non viene distrutta fino a che non si usa l'operatore delete. Può durare di più ma anche di meno…
Quando non interviene il programmatore: