C コードで次のようなマクロを使用すると、
#define var 10
それでは、カーネルによってプロセスに割り当てられたスペースの正確な場所はどこですか? ヒープ、BSS、またはグローバルデータで? それとも、コンパイラ パスの 1 つにある var の単なるテキスト置換ですか?
C コードで次のようなマクロを使用すると、
#define var 10
それでは、カーネルによってプロセスに割り当てられたスペースの正確な場所はどこですか? ヒープ、BSS、またはグローバルデータで? それとも、コンパイラ パスの 1 つにある var の単なるテキスト置換ですか?
のようなプリプロセッサ ディレクティブ#define
は、コンパイルの前処理段階で対応するテキストに置き換えられ、最終的な実行可能ファイルには (ほとんど) 表示されません。
「マクロ」は「コンパイル時のもの」です。
コンパイルする前に、コンパイラが見る「テキストを置き換える」だけです。
結果 (コンパイルされたコード内) は、一連の操作 ... データ宣言 ... または何もない場合があります。
しかし、「マクロ」自体は、プリプロセッサが終了した後、コンパイルが実際に開始される前の古代史です。
マクロは単なるテキスト置換です。置換されると、これらはコードの一部になるため、CODE SEGMENT に格納されます。
これはコンパイラへの命令であるため、コードのスペースではなく、コンパイラのプロセス スペースのテーブルに格納されます。