위의 주제는 저와 몇 가지 실험을했다 bool
및 int
에 if
조건. 그래서 호기심으로이 프로그램을 작성했습니다.
int f(int i)
{
if ( i ) return 99; //if(int)
else return -99;
}
int g(bool b)
{
if ( b ) return 99; //if(bool)
else return -99;
}
int main(){}
g++ intbool.cpp -S
다음과 같이 각 함수에 대한 asm 코드를 생성합니다.
asm 코드
f(int)
__Z1fi: LFB0: pushl %ebp LCFI0: movl %esp, %ebp LCFI1: cmpl $0, 8(%ebp) je L2 movl $99, %eax jmp L3 L2: movl $-99, %eax L3: leave LCFI2: ret
asm 코드
g(bool)
__Z1gb: LFB1: pushl %ebp LCFI3: movl %esp, %ebp LCFI4: subl $4, %esp LCFI5: movl 8(%ebp), %eax movb %al, -4(%ebp) cmpb $0, -4(%ebp) je L5 movl $99, %eax jmp L6 L5: movl $-99, %eax L6: leave LCFI6: ret
놀랍게도 g(bool)
더 많은 asm
지침을 생성 합니다! 그것이 if(bool)
조금 느리다 는 것을 의미합니까 if(int)
? 나는 bool
특히와 같은 조건문에서 사용되도록 설계 되었다고 생각 if
했기 때문에 g(bool)
asm 명령을 덜 생성하여 g(bool)
더 효율적이고 빠르게 만들 것으로 기대 했습니다 .
편집하다:
지금은 최적화 플래그를 사용하지 않습니다. 그러나 그것이 없어도 왜 더 많은 asm을 생성 g(bool)
합니까? 나는 합리적인 대답을 찾고있는 질문입니다. 또한 -O2
최적화 플래그가 정확히 동일한 asm을 생성 한다고 말해야합니다 . 그러나 그것은 질문이 아닙니다. 질문은 제가 요청한 것입니다.