Differenza tra Stack e Heap

Autore: Laura McKinney
Data Della Creazione: 1 Aprile 2021
Data Di Aggiornamento: 13 Maggio 2024
Anonim
stack e heap. cosa sono e come leggere il codice assembly e riconoscere le allocazioni.
Video: stack e heap. cosa sono e come leggere il codice assembly e riconoscere le allocazioni.

Contenuto


Stack e Heap sono i segmenti di memoria utilizzati nelle tecniche di allocazione della memoria. La differenza principale tra Stack e heap è che lo stack comporta un'allocazione lineare e sequenziale della memoria utilizzata nell'allocazione della memoria statica mentre l'heap funge da pool di aree di archiviazione che allocano la memoria in modo casuale (allocazione dinamica della memoria).

La velocità è il parametro principale che distingue stack e heap; uno stack è significativamente più veloce di un heap.

  1. Tabella di comparazione
  2. Definizione
  3. Differenze chiave
  4. Conclusione

Tabella di comparazione

Base per il confrontoPilaMucchio
Di baseLa memoria è allocata in (LIFO) Last in first out fashion.La memoria è allocata in ordine casuale.
Allocazione e deallocazioneAutomaticoManuale
CostoDi menoDi Più
ImplementazioneDifficileFacile
InvocandoSOPRA)O (1)
ProblemaCarenza di memoriaFrammentazione della memoria
Località di riferimentoEccellenteAdeguato
FlessibilitàDimensione fissa e non flessibileIl ridimensionamento è possibile
Tempo di accessoPiù velocePiù lentamente


Definizione di Stack

L'allocazione dello stack segue una strategia LIFO (Last in first out) per assegnare la memoria ai processi con l'aiuto delle operazioni push e pop. Ogni blocco in memoria ha dimensioni fisse che non possono essere espanse o contratte. L'ultima voce nello stack è accessibile in qualsiasi momento. Stack utilizza una memoria contigua in cui un puntatore denominato come base dello stack punta alla prima voce dello stack e un altro puntatore denominato come la parte superiore dello stack punta all'ultima voce dello stack.

Stack supporta anche le chiamate di funzione. Una chiamata di funzione può contenere un insieme di voci dello stack, noto come frame dello stack. Un altro nome del frame dello stack è il record di attivazione nel con del compilatore in quanto memorizza i dati utilizzati al momento della compilazione del programma. Ogni volta che viene chiamata una funzione, il frame dello stack viene inserito nello stack.


Un frame dello stack comprende indirizzi o valori del parametro della funzione e indirizzo di ritorno che indica dove deve essere restituito il controllo dopo aver completato l'esecuzione della funzione.

Definizione di Heap

L'allocazione dell'heap non segue un approccio definito; piuttosto permette l'assegnazione casuale e la disassegnazione della memoria. Una richiesta di assegnazione da parte di un processo restituisce con un puntatore l'area di memoria allocata in un heap e il processo accede all'area di memoria allocata tramite il puntatore.

La deallocazione viene eseguita attraverso la richiesta di deallocazione, diversa dallo stack in cui la memoria viene allocata automaticamente. Heap sviluppa buchi nell'allocazione della memoria quando le strutture di dati vengono create e liberate. Viene utilizzato in fase di esecuzione.

  1. In uno stack, l'allocazione e la deallocazione vengono eseguite dalla CPU ed è automatica mentre, nell'heap, deve essere eseguita manualmente dal programmatore.
  2. La gestione dei frame di heap è più costosa della gestione dei frame di stack.
  3. L'implementazione di uno stack è complessa. Al contrario, l'implementazione di un heap è semplice.
  4. Una chiamata di funzione nello stack richiede tempo O (N). Al contrario, ci vuole O (1) tempo in un heap.
  5. L'implementazione dello stack soffre principalmente del problema della mancanza di memoria. Al contrario, il problema principale in un heap è la frammentazione.
  6. L'accesso a un frame dello stack è più semplice dell'heap poiché lo stack è limitato alla piccola area di memoria e colpisce sempre la cache, ma i frame dell'heap sono dispersi in tutta la memoria, quindi l'accesso alla memoria può causare più mancate cache.
  7. Lo stack non è flessibile, la dimensione della memoria assegnata non può essere modificata. D'altra parte, un heap è flessibile e la memoria assegnata può essere modificata.
  8. Un heap richiede più tempo di accesso rispetto a uno stack.

Conclusione

L'allocazione dello stack è più veloce ma complessa. D'altro canto, un heap è più lento, ma la sua implementazione è più semplice di uno stack. L'heap è più efficiente dello stack.