Esiste la necessità di garbage collection in un linguaggio basato su stack?

14

Qual è la necessità di Garbage Collection (GC) in un linguaggio basato su stack? In una lingua come Forth o RPL (su calcolatori HP ), è necessaria la garbage collection ?

Penserei, dal momento che l'output è saltato fuori dallo stack, che non ci sarebbe stato alcun bisogno. Mi manca qualcosa?

    
posta Todd Moses 15.09.2011 - 16:41
fonte

4 risposte

13

GC viene normalmente applicato alla memoria allocata nell'heap. Non ho familiarità con Forth o RPL, ma se non c'è heap e tutto è archiviato in uno stack globale, allora non c'è niente da fare per GC.

    
risposta data 15.09.2011 - 16:53
fonte
12

Sì, hai ragione. Ma la base dello stack è solo una parte dell'intera storia. Ad esempio, l'interprete bytecode Java è anch'esso basato sullo stack (il codice compilato funziona, per motivi di efficienza, in modo diverso). Questo ci dice che qualsiasi linguaggio può essere trasformato in un linguaggio stack.

Ciò che conta sono gli oggetti al di fuori dello stack, quelli che possono sopravvivere all'attuale esecuzione del metodo. Finché la lingua non ha niente come malloc o new , non ci sono oggetti simili e non hai bisogno di delete o GC.

Una lingua priva di allocazione dinamica della memoria è piuttosto limitata nella sua utilità.

    
risposta data 15.09.2011 - 16:56
fonte
1

La raccolta dei dati inutili è necessaria se il linguaggio supporta intrinsecamente strutture di dati dinamiche. Che è quasi una necessità se vuoi fare qualcosa oltre il livello di C. Senza di esso sei bloccato solo con strutture di dati di dimensioni fisse e gestendo la memoria da solo. Questo è ovviamente il Forth originale, ma probabilmente non è qualcosa che vorresti fare oggi, a meno che non stia facendo solo la codifica dei sistemi di basso livello.

    
risposta data 28.07.2016 - 17:57
fonte
1

La raccolta dei dati inutili non è necessaria se la lingua utilizza l'allocazione statica anziché l'assegnazione dello stack. Ad esempio, Fortran 77 con l'opzione -s (archiviazione statica) alloca tutta la memoria all'avvio del programma, quindi nessuna allocazione di memoria si verifica in runtime per essere liberata. Mentre richiede una certa disciplina, è possibile scrivere programmi, in particolare le simulazioni per utilizzare l'allocazione della memoria statica. L'allocazione statica rimuove eventuali perdite di memoria e porta a prestazioni di cache eccezionali poiché il compilatore può utilizzare l'analisi statica per determinare cosa caricare nella cache.

    
risposta data 28.07.2016 - 18:06
fonte

Leggi altre domande sui tag