c - gcc编译的程序运行速度比g++编译的快

标签 c performance gcc g++

<分区>

Possible Duplicate:
Performance difference between gcc and g++ for C program

当我无意中注意到用 gcc 编译的程序比用 g++ 编译的程序运行得更快时,我正在检查使用循环控制变量的寄存器存储说明符的性能改进。谁能给我解释一下?

代码如下:

#include <stdio.h>

const unsigned long scope = 1000000000;

int main()
{
    register unsigned long i;
    for (i=0; i < scope; i++);
    return 0;
}

;

gcc register.c
time ./a.out   
real    0m0.466s
user    0m0.468s
sys     0m0.000s

g++ register.c
time ./a.out 
real    0m0.923s
user    0m0.920s
sys     0m0.000s

最佳答案

我可以重现该行为 (gcc-4.6.2),生成的程序集的相关部分是

C:

.L3:
    addq    $1, %rbx
.L2:
    movq    scope(%rip), %rax
    cmpq    %rax, %rbx
    jb      .L3

C++:

.L3:
    addq    $1, %rbx
.L2:
    cmpq     $999999999, %rbx
    setbe    %al
    testb    %al, %al
    jne      .L3

因此 C 编译器产生了更好的循环测试。不要问我为什么,我也不知道。

关于c - gcc编译的程序运行速度比g++编译的快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13104178/

相关文章:

c - 在 C 中释放字符串

c - 为什么我的代码会出现无限循环?

python - 具有浮点索引的二维矩阵的径向轮廓

c++ - 从文件读取大型数组时出现段错误。 C++/海湾合作委员会

c++ - 在 CUDA 中测试无穷大

c - GNU argp : How to parse option with only long name?

c# - 如何删除具有 2 个公共(public)元素的数组/结构列表的元素

java - Android中如何压缩下载的图片并在需要时解压?

objective-c - 如何通过Apple libobjc.dll在mingw64-x86中使用clang编译objective-c源代码?

c - 如何在文件末尾自动追加换行符