首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >哪个更快: if (bool)和if(int)?

哪个更快: if (bool)和if(int)?
EN

Stack Overflow用户
提问于 2011-04-23 23:07:19
回答 8查看 44K关注 0票数 100

Which value is better to use? Boolean true or Integer 1?

上面的主题让我在if环境下用boolint做了一些实验。出于好奇,我写了这个程序:

代码语言:javascript
运行
复制
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)

  • asm代码

__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。但这不是问题所在。问题就是我所问的。

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5764956

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档