私の基本的な状況: のようなものを持つインクルード ファイルがある#define foo (Flag1 | Flags2 | Flag3)
ため、ビット フラグの事前定義された組み合わせです。型の安全性のために、これらの #defines を static const static const int foo = (Flag1 | Flag2 | Flag3)
(または同様のもの) に置き換えたいと考えました。このインクルード ファイルは、プログラム内の数十箇所に含まれています。
現在、関連するすべての最適化オプションを有効にしてリリース ビルドを行っているとき (VS2010 の C++ コンパイラを使用)、#defines を置き換えると、置き換えた定数の数に応じて、実行可能ファイルが数 KiB 増加するようです。
なぜこれが起こるのですか?static const
私の知る限り、整数定数は、可能であれば生成される ASM コードに「インライン化」されるはずですが、 vsを使用#define
するとここでどのように違いが生じるかわかりません。逆アセンブリが示すように、明らかに変数はインライン化されていません。
#define:
01325041 or eax,0FFD87FE0h
static int:
011E5451 or eax,dword ptr [CMainFrame::s_TemplateModulePaths+38h (151F008h)]
最後の質問は次のとおり#define
です。生成されたアセンブリに変数が直接挿入されることを回避しながら、それでも依存するにはどうすればよいですか?