0

C言語の変数名はメモリのどのセクションに格納されますか? たとえば、Var_Name は変数名です。この Var_Name がメモリ セクション (コード、dat seg など) のどこに格納されているか知りたいです。

4

5 に答える 5

12

どこにも保存されていません。変数名は、バイナリ コードでは意味を持たないコンパイラの単なるラベルであるため、省略され、関連するメモリ アドレス/レジスタに置き換えられます。

于 2013-09-10T07:12:48.383 に答える
6

変数は、メモリ内イメージのどこにも格納されない傾向があります。デバッグが有効になっている場合、名前は実行可能ファイルに存在する可能性がありますが、コードを実行するために実際には必要ないため、ほとんどの場合、プロセス メモリに読み込まれません。

コードを実行する必要がある時点で、変数名は変数アドレス (絶対、または既知の場所に対する相対、またはスタック相対) に置き換えられています。

デバッガーを使用している場合など、別のプロセスのメモリに読み込まれる可能性がありますが、デバッグ中のアプリケーションからアクセスできるようにはなりません。

于 2013-09-10T07:13:43.887 に答える
2

答えは、オブジェクト ファイルの形式によって異なります。ほとんどの場合、名前は破棄されます。重要な例外は、共有ライブラリまたは DLL のように、シンボルがエクスポートされる場合です。

于 2013-09-10T07:14:00.197 に答える
1

C には変数名が格納されていません。C ファイルを作成してコンパイルすると、主に 4 つの段階 (前処理、コンパイル、アセンブリ、リンク) を経ます。これらの段階では、基本的に、実行可能ファイルを実行するときにコードをマシンが理解できる言語に変換します。これらの段階では、マシンが理解できる住所に名前を置き換えます。

于 2013-09-10T07:27:21.163 に答える
0

Cの場合、この名前は「識別子」と呼ばれ、標準で言及されています(その名前が示すように、コード内の変数を識別します)。

コンパイラは、どの変数を処理しているかの参照を取得するために、コード内の識別子を必要とします。ただし、コンパイル後はアセンブラー コードだけになります (デバッグ モードでない限り)。このいわゆるオブジェクトファイルには、単に前述の値 (整数値、命令、または関数として) とアドレスのみが含まれており、それらと相互作用しています。

したがって、コンパイル後は、識別子はもう必要ありません。少なくとも、ユーザーが明示的にそれらを必要としない場合はそうではありません。(前述のとおり、デバッグ モードの場合はどうなるでしょうか。

于 2013-09-10T07:20:07.600 に答える