2016-08-09 2 views
2

Visual Studioでは、特定の方法で特定のコードを最適化するかどうかを知る最も簡単な方法は?Visual StudioでC++コンパイラが特定の方法で最適化するかどうかを判断する

たとえば、次の行は最適化されている可能性が非常に高いです。

int main(){ 
    int a=3; //#### 
    std::cout<<"1234"<<std::endl; 
} 

これは、ブレークポイントを設定することによって適度に簡単にチェックできます。グレーアウトされます。

コードが複雑な場合はどうなりますか?

以下は単なる例です。
コンパイルせずに知ることができれば理想的でしょう。

例1

int f1(){ 
    return 3; 
} 
int main(){ 
    int a=f1(); //#### likely to be in-line ? 
    std::cout<<a<<std::endl; 
} 

どのように私は(そのF程度を確認することができます)で、ラインになりますか?

例2

void f2(bool a){ 
    if(a) std::cout<<"T"<<std::endl; 
    else std::cout<<"F"<<std::endl; 
} 
int main(){ 
    f2(true); 
    f2(false); 
} 

どのように私は(F2かどうかを知ることができますが)このような2つの機能に分割することにより最適化されます: -

void f2_true(){   std::cout<<"T"<<std::endl; } 
void f2_false(){  std::cout<<"F"<<std::endl; } 
int main(){ 
    f2_true(); 
    f2_false(); 
} 
+5

[this](http://stackoverflow.com/questions/1020498/how-to-view-the-assembly-behind-the-code-using-visual-c)のようなアセンブリを見てください。 ? – TartanLlama

+0

偉大な、それは私が探している答えの一種です。感謝! – javaLover

+4

_ "Visual Studioで特定の方法で特定のコードを最適化するかどうかを知る最も簡単な方法は何ですか?" _最も簡単な方法は_ではありません! –

答えて

3

としては、コメント内で複数回言及しました最適化を予測することは有用ではない。しかし、コンパイラに、彼が実際に行った最適化の情報を与えることができます。たとえば、/ Qvec-report:2のオプションを使用して少なくともレベル4(/ W4)の警告を表示して、コードのベクトル化に関する情報を取得することができます。このオプションの出力を解釈する方法については、Microsoft webpage has detailed informationを参照してください。私はこのオプションが重要なコードフラグメントの並列化を達成するのに非常に有用であることを発見しました。結果的に最大4倍の性能向上をもたらしました。

コンパイラに他の最適化について冗長にさせるフラグがあるとします。

+0

またはhttps://msdn.microsoft.com/en-us/us-us/library/hh872235.aspx –

関連する問題