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)

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: 2019/06/29 15:27
  • by profpro