반응형
스왑 함수의 잠재적인 최적화를 놓쳤습니까?(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
반응형
'programing' 카테고리의 다른 글
gcc는 인수 없이 정의된 함수에 인수를 전달할 수 있도록 하는 이유는 무엇입니까? (0) | 2023.01.27 |
---|---|
Django 모델에서 숫자 필드의 최대값을 제한하는 방법은 무엇입니까? (0) | 2023.01.27 |
자 컴포넌트 내의 이미지의 :src를 바인드하려면 어떻게 해야 합니까? (0) | 2023.01.27 |
마리아DB 10센트OS 7 데이터 이동 문제 (0) | 2023.01.27 |
CollapsingToolbarLayout이 스크롤 플링을 인식하지 않습니다. (0) | 2023.01.27 |