1

同一のコードを生成するようにコンパイラを設定するにはどうすればよいですか?:_

inline bool iszero(int a)
{
    return (a == 0);
}

int main()
{
    int a = 4;

    if(a == 0) // First
        a = 5;

    if(iszero(a)) // Second
        a = 5;

    ///...
}

デバッグモード(インライン化あり)では、逆アセンブルされたコードは次のようになります。

if(a == 0) // First
     a = 5;

bool temp; // Second
if(a == 0)
    temp = 0;
else
    temp = 1;

if(temp == 0)
    a = 5;

なぜそれが起こるのですか?

なぜこの質問がされたのですか?インライン関数を使用してアプリケーションをデバッグする必要があり(デバッグを高速化するため) 、デバッグモードでパフォーマンスを低下させたくありません。

4

1 に答える 1

5

完全に最適化して、リリースモードでコンパイルします。生成されるコードは、次のものと同等になります。

int main()
{
}

最適化をオフにしてベンチマークを行う意味がないため、最適化をオンにしていないコードを比較しても意味がありません。

于 2012-11-17T11:26:56.907 に答える