La gestione della memoria è un fenomeno fondamentale del sistema operativo utilizzato per gestire o gestire la memoria primaria al fine di controllare i diritti di accesso alla memoria sul computer. L'obiettivo è impedire a qualsiasi processo di accedere alla memoria che non è ancora stata assegnata ad esso.
Il sistema operativo alloca la memoria per ogni processo che è diviso in segmenti. Stack e Heap sono i due modi in cui la memoria viene allocata nel sistema operativo.
Il segmento di stack viene utilizzato per memorizzare le variabili di funzione locali che vengono create automaticamente, mentre il segmento heap viene utilizzato per la memoria allocata dinamicamente.
Entrambi sono memorizzati nella RAM del computer e possono crescere e restringersi durante l'esecuzione di un programma. Discutiamo i due in dettaglio e confrontali per capire qual è il migliore.
Il segmento dello stack è una tecnica di gestione della memoria utilizzata per l'allocazione della memoria statica. È un'area speciale nella memoria del computer che viene utilizzata per memorizzare le variabili di funzione locali. Quando viene chiamata una funzione, la memoria viene allocata a tutte le variabili locali da qualche parte e puoi accedere a quelle variabili quando conosci le loro posizioni. I blocchi di memoria vengono liberati quando termina la funzione. Lo stack è uno dei modi per implementare questo processo in modo efficiente. Pensala come una struttura di dati di base in cui gli oggetti sono disposti l'uno sopra l'altro come una pila. Allo stesso modo, è possibile accedere alle variabili locali premendo e scoppiando. Fare push si riferisce all'aggiunta di elementi nello stack e scoppiare significa recuperare oggetti dallo stack. È possibile accedere agli elementi dallo stack nell'ordine LIFO (last-in-first-out).
Heap fa riferimento a un grande pool di memoria utilizzato per l'allocazione dinamica della memoria, il che significa che la memoria rimane assegnata fino a quando il programma non viene terminato o la memoria viene liberata. La memoria è allocata casualmente, quindi non c'è un modo semplice per accedere alla memoria. A differenza del segmento di stack, gli elementi vengono liberati nell'ordine inverso in base alla loro allocazione originaria. In termini semplici, la memoria viene allocata ai programmi su richiesta e liberata quando non più necessaria. Gli elementi dell'heap sono indipendenti l'uno dall'altro, nel senso che è possibile accedervi mentre il programma viene eseguito e liberato al termine del programma. È come un pool di memoria globale utilizzato per memorizzare variabili globali e molte variabili che lo fanno riferimento.
Nell'architettura del computer, uno stack è una regione speciale della memoria del computer esplicitamente assegnata per le variabili automatiche. Nella programmazione, la variabile automatica è una variabile locale che indica che l'ambito della variabile è locale rispetto al blocco in cui è stato dichiarato. La memoria viene allocata automaticamente a queste variabili all'entrata nel blocco e la memoria viene liberata all'uscita. Heap, d'altra parte, è la parte della memoria del computer utilizzata per allocazioni di memoria dinamica che significano che i blocchi di memoria sono allocati e de-allocati in modo casuale.
Lo stack viene utilizzato per memorizzare le variabili locali e il cui ambito sono definiti all'interno della funzione. In termini tecnici, lo stack supporta l'allocazione della memoria statica che corrisponde alle variabili statiche locali e alle variabili di ambito. La memoria viene assegnata prima dell'esecuzione del programma, generalmente al momento della compilazione e la struttura dei dati utilizzata viene chiamata stack. Heap, d'altra parte, viene utilizzato per l'allocazione dinamica della memoria, il che significa che la memoria viene allocata manualmente al runtime durante l'esecuzione di un programma. I programmi richiedono memoria, solitamente per aggiungere un nodo alla struttura dati e restituisce se non necessario.
Uno stack è gestito e ottimizzato dalla CPU e l'accesso ai dati avviene in ordine LIFO (last-in-first-out). LIFO si riferisce al metodo di archiviazione dei dati in pile di memoria in cui il blocco di memoria più recente è il primo a essere liberato e viceversa. Questo rende la gestione della memoria efficiente. Gli elementi dell'heap, al contrario, sono indipendenti l'uno dall'altro e i dati possono essere consultati arbitrariamente, il che significa che un blocco di memoria può essere assegnato e liberato in qualsiasi momento indipendentemente dal loro ordine. A differenza degli stack, gli heap non hanno uno schema definito per l'allocazione e la deallocazione dei blocchi di memoria.
La memoria viene gestita automaticamente nello stack e le variabili vengono allocate e deallocate automaticamente, il che significa che lo stack è riservato solo alle variabili temporanee. Le variabili locali diventano attive quando una funzione viene eseguita e quando termina, le variabili escono dall'ambito e ciò significa che l'ambito della variabile è locale a una funzione ed esiste finché tale funzione viene eseguita. A differenza dello stack, la memoria viene allocata mentre il programma viene eseguito in heap, il che rende un po 'più lento l'accesso alle variabili memorizzate qui. Poiché non esiste un ordine specifico nella prenotazione dei blocchi, i blocchi di memoria possono essere assegnati e liberati in qualsiasi momento.
Entrambi sono i modi più comuni di allocazione della memoria e sono memorizzati nella RAM del computer per un'efficiente gestione della memoria. Tuttavia, l'accesso alla memoria in uno stack è veloce perché la memoria viene gestita automaticamente mentre nell'heap, la memoria deve essere gestita manualmente, il che significa che è necessario allocare la memoria libera da soli quando i blocchi non sono più necessari. Lo stack è ovviamente più veloce e facile da usare grazie alla sua flessibilità, ma ha la sua giusta quota di pro e contro. Sebbene lo stack non abbia limiti sulla dimensione della memoria, è un po 'difficile da implementare. L'heap è più lento di uno stack, ma la sua implementazione è più semplice.