上面的话题让我做一些实验与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。但这不是问题。问题是我所问的。
g(bool)
,这也是我正在寻找一个合理答案的问题。