質問

調査の結果をより速くコード:"ans=n*3"または"ans=n+(n-2)"?

このnはintまたは長いのではないようにするには、現代のWin32インテルボックス。

この調子が異なる場合がありましたdereferencing関与することで、これが早い?

long    a;
long    *pn;
long     ans;

...
*pn = some_number;
ans = *pn * 3;

または

ans = *pn+(*pn*2);

または、何か一方に安心してご利用いただける、最適化コンパイラが占めるこの場合?

役に立ちましたか?

解決

IMOなどのマイクロ-最適化が必要な場合を除きかのエキゾチックコンパイラです。く読みやすさの最初の場所です。

他のヒント

ではどちらでも構いません。現代のプロセッサ実行することができ整数MUL指導を一時計サイクル以下のとは異なり、高齢processersる施するために必要なシリーズのシフトに追加します内部を行うためには、MULをもたらし、複数のサイクルです。いベット

MUL EAX,3

実行速

MOV EBX,EAX
SHL EAX,1
ADD EAX,EBX

最後のプロセッサがこのような最適化が有ったの486.あり、この偏りがあるためのintelプロセッサがあ代表のワークをしていくでしょう。

いずれにせよ、あらゆる合理的なコンパイラの動きを最小/最速のコードです。でも読みやすい。

で容易に求めることが可能で自分でいる。(使用 gcctime からcygwin)

/* test1.c */
int main()
{
    int result = 0;
    int times = 1000000000;
    while (--times)
        result = result * 3;
    return result;
}

machine:~$ gcc -O2 test1.c -o test1
machine:~$ time ./test1.exe

real    0m0.673s
user    0m0.608s
sys     0m0.000s

の試験のためのカップルでの繰り返し、その他。

したい場合をのぞいてみ組み立てコード gcc -S -O2 test1.c

このようにコンパイラは、その構成とその周辺のコードです。

すべきでない"というもうとしているかどうかも、"より速く'なして測定を実施するものとする。

一般 きなこのようなナノスケールの最適化も現在ではほとんど完全にirrelevance、また純粋に作業領域で問題という既に多用するプロファイラとのアセンブリ言語の出力をコンパイラです。

難しいことではないけれどかのコンパイラで行うことコードを使用していDevStudio2005年。書簡単なプログラム以下のコード:

int i = 45, j, k;
j = i * 3;
k = i + (i * 2);

場合にブレークポイント中線走行のコードをアンインストールします。時のブレークポイントは、右クリックしてソースファイルを選んで行く"分解".ご存在していましたが、ウィンドウ、コードのCPUです。まこの場合には最後の二つのラインを正確に同じこと、すなわち"レeax,[ebx+ebx*2]"(ビットの移動に加え、この特定の例)。現IA32CPU、あるんじゃないでしょうかをより効率的な直MULよりビットの移行によりpipelineing自然のCPUについて考場合、ペナルティを変更した値す。

ここアクツを着るのが当たり前ですが、コンパイラは巧みながりの指示コード.

状況にもよりますコンパイラで実際に使用すが、もうその翻訳と同じコードです。

確認できますので、"自分で作成さまざまな運転条件に対してプログラムの確認、解体できます。

ほとんどのコンパイラはスマートな分解する整数倍をつなぐ"のミッションのビットシフトが加わります。知らないWindowsのコンパイラが少なくともgccできる吐き出るアセンブラ、だれできるのではないでしょうか参照同一のアセンブラもこのような動向に応えるかのようです。

ません。があると思うこれからも私たちは時代の変化と最適化.どのくらい時間での投資を考えて書きる問題ではなく、符号化や検査の理由を教えてください。

:-)

どのご利用も最適化コンパイラ、 コードを記述するコンパイラの理解.ここではコンパイラを巧みなoptimisations.

お願いたしますこの問いることを示します最適化コンパイラを知り最適化によります。信頼でのコンパイラです。使用 n * 3.

してい この答え しています。

コンパイラでの最適化コードなど。る現代のコンパイラを製造するのと同じコードと異なっている場合、また交換 * 2 による左シフトができます。

信頼のコンパイラの最適化の少しのコードをするようです。読みやすさがより重要なのコードです。真の最適化に来てより高いレベル。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top