programing

스왑 함수의 잠재적인 최적화를 놓쳤습니까?(gcc)

itsource 2023. 1. 27. 21:48
반응형

스왑 함수의 잠재적인 최적화를 놓쳤습니까?(gcc)

이 스왑 기능은 Linux x86-64 어셈블리로 작성했습니다.

swap: ; written by me
    mov al, byte [rdi]
    xchg byte [rsi], al
    mov byte [rdi], al
    ret

궁금해서 아래 C코드도 -O3로 컴파일 했습니다.

void swap(char *a, char *b) {
  char temp = *a;
  *a = *b;
  *b = temp;
}

objconv를 사용해서 다음 조립품을 얻었어요

swap:   ; written by GCC -O3
        endbr64                                         ; 0000 _ F3: 0F 1E. FA
        movzx   eax, byte [rdi]                         ; 0004 _ 0F B6. 07
        movzx   edx, byte [rsi]                         ; 0007 _ 0F B6. 16
        mov     byte [rdi], dl                          ; 000A _ 88. 17
        mov     byte [rsi], al                          ; 000C _ 88. 06
        ret                                             ; 000E _ C3

그 결과도 일리가 있고, 할 수 있지만, 제 코드는 더 짧습니다.최적화를 놓쳤습니까?그렇다면, GCC는 어떻게 이것을 놓칠 수 있을까요?

언급URL : https://stackoverflow.com/questions/73594483/swap-function-potential-missed-optimization-gcc

반응형