Differences

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

Link to this comparison view

appunti3s:code_data_bss [2018/04/25 07:55] (current)
Line 1: Line 1:
 +=====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.
 +
  
  • appunti3s/code_data_bss.txt
  • Last modified: 2018/04/25 07:55
  • (external edit)