1

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

4

2 に答える 2

4

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

于 2009-05-05T21:58:12.623 に答える
1

もちろん、答えは言語によって異なります。ホストされている動的言語と下位レベルの実装言語の両方です。Perlに適用されるものは必ずしもPythonに適用されるわけではなく、Tclに適用されるものはJavaやLISPにも適用されません。

Perlには、変数の値のバージョンごとに異なるストレージを含むSV(スカラー変数)という名前の経営幹部レベルの構造があります。これらは多くの場合ヒープベースです。文字列のストレージは常にヒープベースになりますが、文字列に変換されたことがない純粋な数値は、厳密にスタック上にあるSVにある可能性があります。Perlでは、これらのものは参照カウントされます(そして、不滅、または不滅、およびその他のあらゆる種類の興味深い用語)。より複雑なタイプ(AV、HV、RVなど)はSVに基づいています。

于 2009-05-05T22:34:16.173 に答える