2

重複の可能性:
プログラミング言語の変数名がメモリ空間を占有するかどうか

私はちょうどメモリ割り当てについて読んでいて、この質問を疑問に思わずにはいられません:

両方を行う

int x = 4;

int this_is_really_really_long_name_for_an_integer_variable = 4;

同じ量のメモリを占有します(変数によって占有されるメモリの合計。 だけではありません)sizeof(int)

この質問が「プログラミング言語とコンパイラの構造」に関連していることは理解しています。しかし、私はそれを勉強する必要はありません:(

4

5 に答える 5

7

Cで?はい、これらの変数は同じ量のスペースを占有します。変数名は、コンパイル時にコンパイラによってのみ使用されます。

しかし、実行時に変数名を保存する言語がいくつかあります。

于 2012-11-27T11:34:41.843 に答える
7

一般に、それらは同じ量のスペースを占有しsizeof(int)ます。ただし、デバッグ用のシンボルを追加してオブジェクト ファイルを作成する場合は、比率が異なると主張する人もいるでしょう。変数が保存するデータの量は変わりませんが、変数名が長い場合、デバッグ シンボルはより多くのスペースを占有します。次の例を考えてみましょう。

$ cat short.c && gcc -c short.c && wc -c short.o
int x = 0;
927 short.o
$ cat long.c && gcc -c long.c && wc -c long.o
int this_is_really_really_long_name_for_an_integer_variable = 0;
981 long.o

サイズの違いは、まさに変数名の長さの違いです。

ただし、実行時の効率とメモリ使用量の観点からは問題ありません。

于 2012-11-27T11:37:23.307 に答える
3

変数名の長さは、そのために予約されているストレージの量には関係ありません。ほとんどの場合、変数名は生成されたマシン コードに保持されません。

于 2012-11-27T11:37:03.953 に答える
2

コンパイラはあなたの名前を保存しないため、32ビット。アドレスのみとして扱います。int コンテナは 32 ビットしか占有していませんでした。

于 2012-11-27T11:36:11.880 に答える
1

変数名は、コンパイル時のアドレス バインドにのみ使用されます。
変数名は、アドレスバインディングが完了するとコンパイラプロセスの1つのフェーズである字句処理のシンボルテーブルに格納され、変数名は使用されず、変数名の長さは問題になりません。32ビットしかかかりません

于 2012-11-27T11:37:21.250 に答える