2013-11-27 19 views
8

GCCのすべての最適化をオフにするにはどうすればよいですか? -O0を使用すると、エフェクトのないステートメント、またはブレークステートメントのない無限ループの後のコードが最適化されるため、機能しません。GCCのすべての最適化をオフにする方法

+0

何もありません別の変数または変数に算術演算を行うと、別の変数

  • 参照に保管/すべて、それを判断することはできませんコンパイラは、コンパイル時に使用されていないことを確認するために、他の関数内の変数を変更私は-g -gですstrict-dwarf -Wall – user2124324

  • +0

    すべての最適化をオフにすることはできません。 –

    +0

    フラグがなくてもgccはいくつかの基本的な最適化を行います。エフェクトのないステートメントを削除することは理にかなっています(最適化の有無)。ただ好奇心が強い:なぜあなたはデッドコードを保持したいですか? –

    答えて

    7

    gccが到達不能なコードや効果のない文を無視しないようにする方法はありません。

    あなたができることは、揮発性変数を使用して到達できないように見えることです。上記の例では

    volatile bool always_true = true; 
    
    if(always_true ) 
    { 
        //infinite loop 
        //return something 
    } 
    
    //Useless code 
    

    gccがないので、それはこの例では役に立たない

    int a = 5; 
    int b = 5; 
    volatile int c = 9; 
    
    c += 37; 
    return a + b; 
    

    Infactはある知ることができないので、GCCは無駄なコードをoptomizeません、整数cがアウト最適化されないであろうそれが死んだ重量コードであることが分かりません。

    2

    コンパイラが最適化するためにコードをほとんど不可能にする必要があります。たとえば :あなたは

  • を最適化することがない希望する変数の

    • 使用volatileキーワードたとえば、コードは効果があることを確認してください:ただ値だけを印刷したり、それを保存するだけでなく、変数の値を変更しません
  • 関連する問題