上面的主题让我在if
环境下用bool
和int
做了一些实验。出于好奇,我写了这个程序:
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
为每个函数生成代码,如下所示:
适用于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
g(bool)
__Z1gb: LFB1: Pusl%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)
更高效、更快。
编辑:
到目前为止,我没有使用任何优化标志。但是,即使没有它,为什么它会为g(bool)
生成更多的asm,这是一个我正在寻找合理答案的问题。我还应该告诉你,-O2
优化标志生成的是完全相同的asm。但这不是问题所在。问题就是我所问的。
https://stackoverflow.com/questions/5764956
复制相似问题