Моя основная ситуация :У меня есть включаемый файл с чем-то вроде #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
, но при этом полагаться на то, что переменная вставляется непосредственно в сгенерированную сборку?