9

違いはごくわずかかもしれませんが、unsigned long をゼロにするにはどちらがより効率的でしょうか?

unsigned long x;

...

x=0;

--OR--

x^=x;

テイラー

4

3 に答える 3

2

コンパイラが何をするかについて推測する必要はありません。代わりに試してみましょう!

ここにいくつかのテストコードがあります:

void fzero()
{
   unsigned long x;

   x = 0;
}

void fxor()
{
   unsigned long x;

   x ^= x;
}


int main()
{
   fzero();
   fxor();
}

そして、結果のマシンコードを見てみましょう:

; 10   :    unsigned long x;
; 11   : 
; 12   :    x ^= x;
; 13   : }

00000   c2 00 00     ret     0

; 3    :    unsigned long x;
; 4    : 
; 5    :    x = 0;
; 6    : }

00000   c2 00 00     ret     0

PUBLIC  main
; Function compile flags: /Ogtpy
;   COMDAT main
_TEXT   SEGMENT
main    PROC                        ; COMDAT

; 18   :    fzero();
; 19   :    fxor();
; 20   : }

  00000 33 c0        xor     eax, eax
  00002 c3       ret     0
main    ENDP

ああ、見て!どちらも同じように高速で、どちらも正確に 0 ns かかりました。

于 2013-04-04T18:23:44.153 に答える