User Tools

Site Tools


appunti3s:code_data_bss

Nota: questa pagina è stata aggiornata: vedere gestione_della_memoria

Immagine del processo

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)

Segment

Un segmento rappresenta un'area di memoria contigua pari a 64 kB

Text segment (Code segment)

Area che contiene le istruzioni eseguibili e le costanti. Durante l'esecuzione del programma l'area è di dimensione fissa e di sola lettura.

Data segment

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.

BBS segment

(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…)

Heap segment

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.

Stack

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.

Confronto

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:

  • Le variabili globali, statiche e gli oggetti sono inizializzati automaticamente a zero.
  • Le variabili locali e quelle dell'heap (allocate con new) rimangono non inizializzate.
appunti3s/code_data_bss.txt · Last modified: 2020/06/08 22:19 (external edit)