2017-03-22 9 views
-3

私はC++でプログラミングしており、魔法の値の代わりに静的const変数をマクロに使用したいと考えています。例では:私は変数がまだメモリ内のスペースを占有参照しかしながら静的const変数をマクロ

103ec8: e283300a add r3, r3, #10 

static const int myx = 10; 

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

アセンブリは、直接値10を使用して生成されました。私は--symsオプションでobjdumpは使用することによって、この結論に達しました:

001059a8 l  O .data 00000004 myx 

変数自体が参照されることはありませんので、私は、このための必要性が表示されません。コンパイラ/リンカにデータセクションの領域を節約しないように指示することはできますか?あるいは、マクロを含まない提案がありますか?

+3

最適化を有効にしてコンパイルしましたか? –

+2

ビルドとリリースのデバッグまたはリリースはどのような最適化レベルですか?デバッグビルドの場合、なぜこの最適化が起こると思いますか? –

+0

迅速な対応をありがとうございます!そして、私は両方ともdebugと-O0でコンパイルしていました。デバッグフラグを削除し、O2で問題が完全に消えた! noobの質問に申し訳ありません! – joseCM

答えて

1

myxのアドレスを使用する場合は、それが存在する必要があります。そうしなければ、コンパイラは自由にそれを削除することができます。

最適化を有効にしてコンパイラを有効にしてください。

0

最適化を有効にすると、マクロと定数で生成されるコードは同じです。demoを参照してください。