static const变量as macro

时间:2017-03-22 18:12:51

标签: c++ const static-variables

我在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

我没有看到对此的需要,因为变量本身从未被引用过。我可以指示编译器/链接器不要为它保存数据部分的空间吗?或者你有其他任何不涉及宏的建议吗?

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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