2016-08-20 7 views
-1

C++で読みやすくするために 'if'に速度差がありますか?例えば、

bool IsPlayerOutMap() 
{ 
    bool t = (Player.x < 0 || Player.y < 0 
     || Player.x > 1000 || Player.y > 1000); 
    return t; 
} 

if(IsPlayerOutMap()) 
    cnt++; 

if((Player.x < 0 || Player.y < 0 
     || Player.x > 1000 || Player.y > 1000)) 
    cnt++; 

2つのコーディングスタイルで任意の速度の違いはありますか?

+0

いいえ。ここでの機能は簡単にインライン化可能です。 – milleniumbug

+5

私はマイクロ最適化が大好きです。なぜそれを測定しないのですか? –

+1

いずれの半分のコンパイラも関数をインライン化し、同じ実行可能コードを生成する必要があります。しかし、コードの2番目のブロックには一対の不要なかっこがあります。 – Bernard

答えて

1

基本的には「失敗」の場合はパフォーマンスペナルティがあります。 CPUは実行パイプを持っているので(前回の終了前に次のasmコマンドを実行し始めます)、CPU分岐予測を "if"と入力するとそのパスを実行するように選択しました(if結果は " 「true」または「false」)、それが間違っていると、execが途中で停止し(コマンドをNOP - no operationに置き換えて)、もう一方のパスを開始します。

あなたのコードでは、 "if"コードと論理ステートメントは多かれ少なかれです(理由を理解するために「ショートカットなら」を読むことができます)。ただし、別の関数を呼び出すことはここで重要です。コメント内で言われていたこととは違って、コンパイラは(フラグを指定しない限り)インラインに置くことはできません。場合によってはインラインコードが長くなり、キャッシュのスラッシングを増やすことができます命令キャッシュ。

これは前述のようなマイクロ最適化であり、ここで決定する最も良い方法はプロファイラです。私の経験からのこのような小さな最適化は、非常に特殊な場合にのみ重要です。たとえば、ルータは毎秒10Mパケットを処理し、あらゆるナノの問題よりも重要です。

別の点です。 "if"コードの周りに常にカッコを追加する方が良いコードスタイルです。パフォーマンスには影響しません。

関連する問題