static const vs. #определить в c++ -различия в размере исполняемого файла

Моя основная ситуация :У меня есть включаемый файл с чем-то вроде #define foo (Flag1 | Flags2 | Flag3), так что это предопределенная комбинация битовых флагов. Ради безопасности типа -я хотел заменить эти определения #статическими константами, т.е.static const int foo = (Flag1 | Flag2 | Flag3)(или аналогичный ). Этот включаемый файл включен в десятки мест программы.

Теперь, когда я делаю сборку релиза со всеми включенными соответствующими параметрами оптимизации (с использованием компилятора C++ VS2010 ), замена определений #, похоже, увеличивает исполняемый файл на несколько КиБ, в зависимости от того, сколько констант я заменены.

Почему это происходит? Насколько мне известно, целочисленные константы должны быть «встроены» в код ASM, который создается, если это возможно, и я не вижу, как использование static constпротив #defineбудет иметь здесь значение. Ясно, что переменная не встроена, как показывает дизассемблирование :

#define:
01325041  or          eax,0FFD87FE0h
static int:
011E5451  or          eax,dword ptr [CMainFrame::s_TemplateModulePaths+38h (151F008h)]

. Итак, последний вопрос: :Как я могу избежать #define, но при этом полагаться на то, что переменная вставляется непосредственно в сгенерированную сборку?

9
задан j_schultz 2 August 2012 в 14:17
поделиться