단순히 비교(뺄셈) 보다 XOR이 빠른것은 누구나 알 수 있다.

하지만 루프문에서도 그럴까?


int test[256];


1. for(int i = 0; i < 256; ++i) test[i] = 0;


2. for(int i = 0; i ^ 256; ++i) test[i] = 0;

을 예로들어보자.



전자(1)가 컴파일 되면 다음 비슷한 코드가 된다. (더 최적화 될 수도 있음)


        lea edi, test

        xor eax, eax

        mov ecx, 256

        rep stosd


후자(2)가 컴파일 되면 다음 비슷한 코드가 된다.


        lea edi, test

        xor eax, eax

        xor ecx, ecx

    loop1 :

        mov [edi], eax

        add edi, 4

        inc ecx

        mov edx, ecx

        xor edx, 256  // xor 시 레지스터가 파괴되기 때문에 ecx 만으로 카운팅 + xor 을 할 수 없다. cmp 계열은 비교에 사용된 레지스터를 건드리지 않음

        jnz loop1


이렇게 되면 결과는 전자 압승.