User Tools

Site Tools


appunti3s:code_data_bss

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
appunti3s:code_data_bss [2019/06/29 15:27]
profpro
appunti3s:code_data_bss [2020/06/08 22:19] (current)
Line 1: Line 1:
 +Nota: questa pagina è stata ;;aggiornata;;: vedere [[appunti3s: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)
 +
 +
 +{{:appunti3s:stack.png?|}}
 +==== 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.
 +