2009-02-24 8 views
6

Zum Beispiel in JavascriptWie erfolgt die Speicherzuweisung für Variablen in Skriptsprachen?

kann ich sagen,

var x = 5; 

Später kann ich

x = 'a'; 

tue und dann

x = "hello"; 

So, wie Speicher für die Variablen zugewiesen ? So wie es ist, haben alle Variablen einen gemeinsamen Typ 'var' und Werte von Variablen können sich zur Laufzeit ändern, wie oben gesehen. Ist es nicht eine schwierige Aufgabe, Speicher für diese Variablen zuzuordnen und zu verwalten? Genau, wie wird es gemacht?

+0

Siehe auch diese Stapelüberlauf [Wie Variablen Speicher in Javascript zugeordnet sind?] (Http://stackoverflow.com/questions/2800463/how-variables-are-allocated-memory-in-javascript) insbesondere ein Kommentar, der enthält ein Link zu dieser Dissertation [http://www.cs.unm.edu/~williams/cs491/three-imp.pdf] von R. Kent Dybvig. –

Antwort

3

Python verwendet eine Technik namens reference counting, die im Grunde einen Zähler in den Wert setzt. Jedes Mal, wenn ein Verweis auf einen Wert erstellt wird, wird der Zähler inkrementiert. Wenn eine Referenz auf den Wert verloren geht (z. B. wenn Sie einen neuen Wert für 'x' vergeben), wird der Wert dekrementiert. Wenn der Zähler Null erreicht, bedeutet dies, dass kein Verweis auf den Wert vorhanden ist und die Zuordnung aufgehoben werden kann. Dies ist eine vereinfachte Erklärung, aber das sind zumindest die Grundlagen.

+0

Also was wird x als behandelt werden? Wenn ich x = 5 sage, wird es dann während der Zuweisung als int oder als String behandelt? und wo wird die typinformation gespeichert? –

+0

Wie die Variable zugewiesen wird und die Typinformationen gespeichert werden, ist implementierungsspezifisch. Wenn Sie sehen möchten, wie es eine Implementierung macht, können Sie Rhino: JavaScript für Java http://www.mozilla.org/rhino/ herunterladen. –

+0

Dies gilt nur in CPython und ignoriert auch die Garbage Collection. Du solltest es reparieren. – Antimony

1

Vielleicht gibt diese link mehr Einblick, zumindest auf Seiten von Javascript.

0

Nun, diese Variablen sind Verweise auf unveränderliche Zeichenfolgen, die zur Kompilierzeit zugeordnet werden. Die meisten C-basierten Skriptsprachen ordnen einen großen Speicherblock zu, erweitern ihn nach Bedarf und tun seine eigene Zuweisung darin, und geben selten etwas zurück an die O/S. Vor allem in einer lexikalisch beschränkten Sprache, die fast alle von ihnen sind, werden Variablen alle dynamisch innerhalb dieses Blocks zugewiesen, nicht auf irgend etwas, was einem C-Stapel analog ist, und sie werden entweder mit Referenzzählung oder mit einem Garbage Collector freigegeben.

Wenn Ihre Skriptsprache auf der JVM oder .NET oder etwas Ähnlichem läuft (Parrot?), Ist die Erstellung einer Variablen lediglich die Erstellung von etwas wie einem Java-Objekt. Einige Zeit, nachdem keine Referenzen mehr auf das Objekt vorhanden sind, wird der Garbage Collector den Speicher zurückfordern.

+0

Mit der Ausnahme, dass die VM eine Escape-Analyse durchführen und manchmal Objekte auf dem Stapel zuweisen kann. – Antimony

Verwandte Themen