0

ストレージバインディングに基づくバインディングプロセスと変数の分類について研究しています。そのため、次の 4 種類の変数に直面しました。

  1. 静的変数: これらは実行前 (つまり、コンパイル中) にメモリにバインドされ、実行中ずっとバインドされたままです。
  2. スタック動的変数: これらの変数は、コンパイル時に型に静的にバインドされますが、コードの実行が宣言に到達するまでメモリ位置にバインドされません。
  3. 明示的なヒープ動的変数: これらの変数は、明示的な実行時のプログラマ指定の命令によって割り当ておよび割り当て解除されます。必要なメモリ セルを提供するために、スタックではなくヒープが使用されます。
  4. 暗黙的なヒープ動的変数: メモリ セルを含むこれらの変数のすべての属性は、値が割り当てられるときにバインドされます。

私の質問は、タイプ 2 と 4 に関するものです。タイプ ビディングが動的なプログラミング言語 (Php、Ruby、Python など) では、すべての変数がタイプ 4 のように見えます。

本当ですか?ローカル変数を含むすべての変数がヒープに置かれますか? これは実装の問題ですか、それともローカル変数がスタックに置かれ、他の変数がヒープに置かれる動的型バインディングを持つ言語を実装する可能性はありませんか?

4

1 に答える 1

1

いいえ。タイピングと割り当ての間に相関関係はありません。1 つ目は言語機能であり、2 つ目 (通常) は、特定の最適化やその他の要因に依存する可能性がある特定の実装の詳細です。一部の変数はまったく「割り当て」られません。より高級な言語では、変数と割り当ての間に何らかの関係があると仮定するのは間違っています. プログラムテキストで特定の値に名前を付けているだけです.

リレーション タイプが持つ唯一の特徴は、より興味深い最適化を可能にするか、少なくともより簡単にすることです。

于 2013-03-01T07:29:56.767 に答える