2017-03-22 89 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