2014年8月6日

ループカウンタ(ビット演算)

ビット演算によるループカウンタだと条件分岐が減って、速くなると聞いたので
 
int n = 0;
while(1){
    n++;
    if(n == 127){
        n = 0;
    }
}
という単純なカウンタと
 
int n = 0;
while(1){
    n++;
    n &= 127;
}
というビット演算を使ったカウンタを作り比較 比較と言ってもどうすればいいのかよくわからないので、gcc -Sでアセンブリ出力
自分はアセンブリが読めるわけではないが、前者で作ったコードにはどう見ても比較してるであろう項目

.L3:
    cmpl $127, -4(%rbp)
    jne .L2
    movl $0, -4(%rbp)

があるのに対し、ビット演算を使ったコードでは加算している(と思う)部分だけで完結しているように見える
ということは実行も幾分か速いのだろう

最適化したら上のコードも比較なしになったりするんだろうか?

0 件のコメント:

コメントを投稿