2009-02-24 10 views
6

Per esempio, in javascriptCome viene eseguita l'allocazione della memoria per le variabili nei linguaggi di scripting?

posso dire

var x = 5; 

tardi posso fare

x = 'a'; 

e poi

x = "hello"; 

Quindi, come si è memoria allocata per le variabili ? Così com'è, tutte le variabili hanno un tipo comune 'var' e i valori delle variabili possono cambiare in fase di esecuzione come visto sopra. Non è un compito difficile allocare e gestire la memoria per queste variabili? Esattamente, come è fatto?

+0

Vedere anche questo overflow dello stack [In che modo le variabili vengono allocate in memoria in Javascript?] (Http://stackoverflow.com/questions/2800463/how-variables-are-allocated-memory-in-javascript) in particolare un commento che contiene un collegamento a questa dissertazione [Three Implementation Models for Scheme] (http://www.cs.unm.edu/~williams/cs491/three-imp.pdf) di R. Kent Dybvig. –

risposta

3

Python utilizza una tecnica denominata reference counting, che in pratica inserisce un contatore nel valore. Ogni volta che viene creato un riferimento a un valore, il contatore viene incrementato. Quando un riferimento al valore viene perso (ad esempio quando si assegna un nuovo valore a "x"), il valore viene decrementato. Quando il contatore raggiunge lo zero, significa che non esiste alcun riferimento al valore e può essere deallocato. Questa è una spiegazione semplificata, ma questa è almeno la base.

+0

quindi cosa verrà trattato x? quando dico x = 5, allora sarà trattato come int o una stringa durante l'allocazione? e dove verranno archiviate le informazioni sul tipo? –

+0

La modalità di allocazione della variabile e la memorizzazione delle informazioni sul tipo saranno specifiche dell'implementazione. Se vuoi vedere come funziona un'implementazione, puoi scaricare Rhino: JavaScript per Java http://www.mozilla.org/rhino/. –

+0

Questo vale solo per CPython e ignora anche la garbage collection. Dovresti aggiustarlo. – Antimony

1

Forse questo link fornisce ulteriori informazioni, almeno da parte di javascript.

0

Bene, quelle variabili sono riferimenti a stringhe immutabili che vengono allocate in fase di compilazione.

Ovviamente dipende dalla VM, ma in generale, penso che la maggior parte dei linguaggi di scripting basati su C allocino un grande blocco di memoria, espandendolo come necessario e apportando la propria allocazione all'interno di esso, raramente restituendo qualsiasi cosa indietro all'O/S. Soprattutto in un linguaggio lessicale, che quasi tutti sono, le variabili sono tutte allocate dinamicamente all'interno di questo blocco, non su qualcosa di analogo a uno stack C, e vengono liberate con il conteggio dei riferimenti o con un garbage collector.

Se il linguaggio di scripting è in esecuzione su JVM, o .NET, o qualcosa del genere (Parrot?), La creazione di una variabile è semplicemente la creazione di qualcosa come un oggetto Java. Qualche tempo dopo non ci sono più riferimenti all'oggetto, il garbage collector recupererà la memoria.

+0

Tranne che la VM può eseguire analisi di escape e talvolta allocare oggetti nello stack in ogni caso. – Antimony