2017-03-22 28 views
-3

我使用C++进行编程,希望使用静态常量变量而不是宏来表示魔法值。在该实例中:static const variable as macro

static const int myx = 10; 

int incbyx(int y){ 
    return y + myx; 
} 

直接生成的组件,使用该值10:

103ec8: e283300a add r3, r3, #10 

但是我看到变量仍然在存储器中占有的空间。我来到这个结论通过使用objdump的使用--syms选项:

001059a8 l  O .data 00000004 myx 

我不明白这样做的必要性,因为变量本身不会被引用。我可以指示编译器/链接器不要在数据节中保存空间吗?或者你有没有其他建议不涉及宏?

+3

您是否启用优化进行编译? –

+2

调试或发布版本,如果发布什么样的优化级别?如果调试构建您为什么期望这种优化发生? –

+0

感谢您的快速响应!是的,我正在编译与调试和-O0。删除了调试标志,并与O2和问题完全消失!对于noob问题抱歉! – joseCM

回答

1

如果您拿myx的地址,那么它必须存在。如果你不这样做,编译器可以自由地忽略它。

开启优化的任何好的编译器都会这样做。

0

如果已启用优化,则使用宏和常量生成的代码是相同的,请参阅demo