首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GCC将小于更改为小于或等于

GCC将小于更改为小于或等于
EN

Stack Overflow用户
提问于 2013-03-30 19:28:28
回答 3查看 277关注 0票数 5

我有一个简单的程序,我正在用它来唤醒我对GDB的记忆(我已经很多年没有接触过它了)。

代码语言:javascript
复制
#include <stdio.h>

int main()
{
  int i;

  for (i = 0; i < 10; i++)
  {
    printf("Hello World\n");
  }

  return 0;
}

我用gcc -g for-test.c -o for-test编译这段代码。根据手册页,我不希望使用任何优化,因为我没有指定任何优化。

当我将其加载到GDB并运行disassemble main时,i < 10比较结果如下:

代码语言:javascript
复制
cmp    DWORD PTR [rbp-0x4],0x9
jle    0x4004fe <main+10>

这似乎有效地改变了i < 10i <= 9的比较。考虑到这些是整数比较,应该没有区别,但我想知道是否有任何原因,GCC输出这个程序集,而不是比较10和跳转,如果小于(JL)?

编辑:这是在64位处理器的机器上,运行Ubuntu与GCC 4.6.3和GDB7.4-2012.04。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-03-30 19:44:17

在执行速度上应该没有区别。我认为gcc通常会发出jle来进行这样的比较,并且为了在生成的程序集中保持一致而这样做。

票数 5
EN

Stack Overflow用户

发布于 2013-03-30 19:45:06

只要可观察到的行为相同,编译器就可以执行优化。这就是所谓的。由于这两种情况的可观察行为是相同的,因此允许编译器生成这两种情况中的任何一种汇编代码。即使您没有启用任何优化,也是如此。

票数 2
EN

Stack Overflow用户

发布于 2013-03-30 19:39:39

这不是有效的优化,只是编写相同代码的另一种方式。使用-O标志进行编译会生成更复杂的优化。

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

https://stackoverflow.com/questions/15718021

复制
相关文章

相似问题

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