STACK HEAP: variabili automatiche e non..

di il
4 risposte

STACK HEAP: variabili automatiche e non..

Ciao,
stavo approfondendo un po' meglio alcune questioni come le variabili automatiche, variabili dinamiche, statiche e a ciò che avviene a livello di memoria:
stack, heap, area varibaili statiche.

A un livello macroscopico, possiamo affermare che la memoria per l'"utente applicativo" è suddivisa in 4 parti fondamentali:

1. Area programma
2. Area variabili statiche
3. Heap
4. Stack

L'area programma ha dimensione fissa e pure l'area della memoria statica è fissata a compile time. Le zone dell'heap e dello stack variano durante il ciclo di vita, seppur la loro dimensione complessiva sia costante.

Dunque è corretto dire che le variabili globali sono memorizzate nell'area delle variabili statiche, alla stregua di quelle definite static?
Sappiamo, inoltre, che la chiamata a una funzione genera un record di attivazione all'interno dello stack. A tal proposito ho qualche perplessità. Senza entrare nel dettaglio di come è fatto un record di attivazione, non mi è chiara la gestione, al suo interno, dei parametri formali. Se per quelli passati per valore è abbastanza evidente che essi verranno scritti nella medesima collocazione di memoria stack del record di attivazione, non mi è chiaro per quelli passati per indirizzo cosa avvenga. Viene creato una copia locale - nello stack - di un nuovo puntatore? La propria collocazione dipenderà dalla natura del puntatore? Puntatore di una variabile automatica e/o statica, piuttosto che dinamica?
Scusate ma su questo punto ho un po' di confusione.

Grazie mille.

4 Risposte

  • Re: STACK HEAP: variabili automatiche e non..

    La differenza fra globali e statiche la fa la visibilità in tutti i file o all'interno di un singolo file.
    Nel passaggio per indirizzo viene creato, sempre nello stack, un puntatore o un reference locale che punta all'indirizzo della variabile statica (la quale resta lì dov'è e non viene copiata). Il puntatore viene distrutto al momento dell'uscita dalla funzione.
  • Re: STACK HEAP: variabili automatiche e non..

    Alexv ha scritto:


    La differenza fra globali e statiche la fa la visibilità in tutti i file o all'interno di un singolo file.
    Nel passaggio per indirizzo viene creato, sempre nello stack, un puntatore o un reference locale che punta all'indirizzo della variabile statica (la quale resta lì dov'è e non viene copiata). Il puntatore viene distrutto al momento dell'uscita dalla funzione.
    Grazie mille Alexv,
    per le prime ho ancora qualche perplessità. La globale dovrebbe essere visibile a livello di intero file. Le statiche dovrebbero essere visibili localmente e non mutare il proprio valore tra una chiamata e l'altra di un blocco. Ma non mi è chiaro se tale definizione di statico corrisponda al concetto di porzione di memoria statica.

    Per quanto riguarda il puntatore in effetti avevo avuto modo di verificarlo in modo empirico.

    Ti sono molto grato per il tuo intervento.
  • Re: STACK HEAP: variabili automatiche e non..

    Per memoria statica s'intende il data segment, dove stanno le variabili globali e le variabili locali dichiarate come static. Mentre le costati locali possono trovarsi anche nel code segment, ma su queste ultime NON sono sicuro. Quindi i concetti coincidono, anche se a seconda del compilatore e standard del C++ si potrebbe fare un'ulteriore differenza fra variabili inizializzate e non.
    Nello stack ci sono le variabili automatiche, locali (entrambe non dichiarate static), temporanee, i parametri delle funzioni, nonché relativo valore di ritorno. Anche le variabili che dichiari nel main risiedono nello stack.
  • Re: STACK HEAP: variabili automatiche e non..

    Alexv ha scritto:


    Per memoria statica s'intende il data segment, dove stanno le variabili globali e le variabili locali dichiarate come static. Mentre le costati locali possono trovarsi anche nel code segment, ma su queste ultime NON sono sicuro. Quindi i concetti coincidono, anche se a seconda del compilatore e standard del C++ si potrebbe fare un'ulteriore differenza fra variabili inizializzate e non.
    Nello stack ci sono le variabili automatiche, locali (entrambe non dichiarate static), temporanee, i parametri delle funzioni, nonché relativo valore di ritorno. Anche le variabili che dichiari nel main risiedono nello stack.
    Grazie, mi hai chiarito del tutto i dubbi che mi erano rimasti! Ancora grazie e complimenti per la precisione e chiarezza!

Devi accedere o registrarti per scrivere nel forum
4 risposte