2009-05-05 8 views
1

動的言語は、変数に割り当てるメモリ量をどのように決定しますか?例えば、 。どのようにコンパイラは変数= 5を変数= "xxx"に変更しますか?いつハードウェアスタックを使用し、いつメモリヒープを使用しますか?動的言語と変数割り当て

答えて

4

コンパイラは、各変数にポインタを保持するのに十分なメモリと、言語ランタイムに必要なメタデータを割り当てます。しかし、それぞれオブジェクトのためにどれだけのメモリが割り当てられているかを尋ねることを意味すると思います。その場合の答えは、オブジェクトのタイプに依存するということです。変数が別のオブジェクトに割り当てられると、その変数に関連付けられたポインターは、そのポインターの内容を変更します。

1

答えはもちろん、ホストされた動的言語と低レベルの実装言語の両方で言語によって異なります。 Perlに当てはまるものは必ずしもPythonには当てはまりませんし、Tclに当てはまるものはJavaやLISPにも当てはまるわけではありません。また、動的言語として数えられますか?

Perlには、変数の値のバージョンごとに異なるストレージを含むSV(スカラー変数)という名前のCレベル構造があります。これらはしばしばヒープベースです。文字列の記憶域は常にヒープベースになりますが、文字列に変換されたことのない純粋な数値は、厳密にスタックにあるSV内にある可能性があります。 Perlでは、これらのものは参照カウントされています(そして、致命的なもの、または不滅のもの、そしてあらゆる種類の興味深いもの)。より複雑なタイプ(AV、HV、RVなど)はSVに基づいています。

関連する問題