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 件のコメント:
コメントを投稿