5

C コードで次のようなマクロを使用すると、

#define var 10

それでは、カーネルによってプロセスに割り当てられたスペースの正確な場所はどこですか? ヒープ、BSS、またはグローバルデータで? それとも、コンパイラ パスの 1 つにある var の単なるテキスト置換ですか?

4

5 に答える 5

14

はい。
最後のもの

単なるテキストの置き換え

これは、前処理パスによって実行されます。いくつかの良い詳細はここで見つけることができます

于 2012-05-30T22:56:57.390 に答える
4

のようなプリプロセッサ ディレクティブ#defineは、コンパイルの前処理段階で対応するテキストに置き換えられ、最終的な実行可能ファイルには (ほとんど) 表示されません。

于 2012-05-30T22:57:54.397 に答える
3

「マクロ」は「コンパイル時のもの」です。

コンパイルする前に、コンパイラが見る「テキストを置き換える」だけです。

結果 (コンパイルされたコード内) は、一連の操作 ... データ宣言 ... または何もない場合があります。

しかし、「マクロ」自体は、プリプロセッサが終了した後、コンパイルが実際に開始される前の古代史です。

于 2012-05-30T23:06:18.757 に答える
1

マクロは単なるテキスト置換です。置換されると、これらはコードの一部になるため、CODE SEGMENT に格納されます。

于 2012-05-31T04:25:40.587 に答える
0

これはコンパイラへの命令であるため、コードのスペースではなく、コンパイラのプロセス スペースのテーブルに格納されます。

于 2012-05-30T23:02:13.687 に答える