海湾合作委员会的变化小于或等于

pwa*_*ing 5 c assembly gcc gdb

我有以下简单的程序,我正在使用它来刷新我对GDB的记忆(我多年没有触及).

#include <stdio.h>

int main()
{
  int i;

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

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我用它编译gcc -g for-test.c -o for-test.基于手册页,我不希望使用任何优化,因为我没有指定任何优化.

当我将其加载到GDB并运行时disassemble main,i < 10比较生成以下内容:

cmp    DWORD PTR [rbp-0x4],0x9
jle    0x4004fe <main+10>
Run Code Online (Sandbox Code Playgroud)

这似乎已经有效地改变的比较i < 10i <= 9.鉴于这些是整数比较,应该没有区别,但我想知道GCC是否有任何理由输出这个程序集,而不是与10进行比较并且如果小于(JL)则跳跃?

编辑:这是在具有64位处理器的计算机上,运行Ubuntu与GCC 4.6.3和GDB 7.4-2012.04.

Fem*_*ref 5

执行速度不应该有差别.我认为gcc通常会为这种比较发出jle,并在生成的程序集中保持一致性.