我在C ++中编程并且希望使用静态const变量而不是宏来表示魔术值。在示例中:
static const int myx = 10;
int incbyx(int y){
return y + myx;
}
直接生成的程序集使用值10:
103ec8: e283300a add r3, r3, #10
但是我看到变量仍占据内存空间。我通过使用带有--syms选项的objdump来得出这个结论:
001059a8 l O .data 00000004 myx
我没有看到对此的需要,因为变量本身从未被引用过。我可以指示编译器/链接器不要为它保存数据部分的空间吗?或者你有其他任何不涉及宏的建议吗?
答案 0 :(得分:1)
如果您使用myx
的地址,则必须存在。如果你不这样做,编译器可以自由地忽略它。
任何打开优化的好编译器都会这样做。
答案 1 :(得分:0)
如果启用了优化,则使用宏和常量生成的代码相同,请参阅demo。