Condividi tramite


Gestione della memoria: allocazione di frame

L'allocazione nel frame prende il nome dal "stack frame" configurato ogni volta che viene chiamata una funzione. Lo stack frame è un'area di memoria che contiene temporaneamente gli argomenti per la funzione, nonché tutte le variabili definite localmente per la funzione. Le variabili frame sono spesso denominate variabili "automatiche" perché il compilatore alloca automaticamente lo spazio per tali variabili.

Esistono due caratteristiche chiave delle allocazioni dei fotogrammi. Prima di tutto, quando si definisce una variabile locale, viene allocato spazio sufficiente nello stack frame per contenere l'intera variabile, anche se si tratta di una matrice o una struttura di dati di grandi dimensioni. In secondo luogo, le variabili frame vengono eliminate automaticamente quando escono dall'ambito:

void MyFunction()
{
   // Local object created on the stack
   CString strName;
   // Object goes out of scope and is deleted as function ends
}

Per le variabili di funzione locale, questa transizione di ambito si verifica quando la funzione viene chiusa, ma l'ambito di una variabile di frame può essere inferiore a una funzione se vengono usate parentesi graffe nidificate. Questa eliminazione automatica delle variabili di frame è molto importante. Nel caso di tipi primitivi semplici (ad esempio int o byte), matrici o strutture di dati, l'eliminazione automatica recupera semplicemente la memoria usata dalla variabile. Poiché la variabile non rientra nell'ambito, non è possibile accedervi comunque. Nel caso di oggetti C++, tuttavia, il processo di eliminazione automatica è un po'più complicato.

Quando un oggetto viene definito come variabile frame, il relativo costruttore viene richiamato automaticamente nel punto in cui viene rilevata la definizione. Quando l'oggetto esce dall'ambito, il distruttore viene richiamato automaticamente prima che venga recuperata la memoria per l'oggetto. Questa costruzione e distruzione automatica può essere molto utile, ma è necessario essere consapevoli delle chiamate automatiche, soprattutto per il distruttore.

Il vantaggio principale dell'allocazione di oggetti nel frame consiste nel fatto che vengono eliminati automaticamente. Quando si allocano gli oggetti nel frame, non è necessario preoccuparsi di oggetti dimenticati che causano perdite di memoria. Per informazioni dettagliate sulle perdite di memoria, vedere l'articolo Rilevamento delle perdite di memoria in MFC. Uno svantaggio dell'allocazione dei fotogrammi è che le variabili frame non possono essere usate all'esterno dell'ambito. Un altro fattore nella scelta dell'allocazione dei fotogrammi rispetto all'allocazione dell'heap consiste nel fatto che per strutture e oggetti di grandi dimensioni è spesso preferibile usare l'heap anziché lo stack per l'archiviazione, poiché lo spazio dello stack è spesso limitato.

Vedi anche

Gestione della memoria