为什么相同的代码运行时间不同?

时间:2015-04-15 06:03:02

标签: c++ c benchmarking

制作基准测试,我已经测试并找出了有趣的结果。

//gcc -o code_in_c.exe code_in_c.c
#include <stdio.h>
int main() {
    int a, b, c, d, r;
    while (scanf("%d %d %d %d", &a, &b, &c, &d) != -1){
        r = a + b * c + d;
        printf("%d\n", r);
    }
    return 0;
}

和cpp的第二个文件

//g++ -o code_in_cpp.exe code_in_cpp.cpp
#include <cstdio>
int main(){
    int a, b, c, d, r;
    while (scanf("%d %d %d %d", &a, &b, &c, &d) != -1){
        r = a + b * c + d;
        printf("%d\n", r);
    }
    return 0;
}
除了前两行之外,它的代码相同。 程序需要从每一行读取4个整数 执行算术运算(从中间乘以两个整数)并从边距添加

1 2 3 4 -> 1 + (2 * 3) + 4 -> 1 + 6 + 4 -> 11

所以,用15万行随机数测试 给我cpp的结果

Running "code_in_cpp.exe", press ESC to terminate...
Program successfully terminated
  exit code:     0
  time consumed: 2.37 sec
  time passed:   4.34 sec
  peak memory:   2162688 bytes

和c。

Running "code_in_c.exe", press ESC to terminate...
Program successfully terminated
  exit code:     0
  time consumed: 2.87 sec
  time passed:   4.57 sec
  peak memory:   2162688 bytes

所以我的问题是什么取决于运行时间?

(两者都在同一台机器上运行)

3 个答案:

答案 0 :(得分:3)

这次取决于以下内容:OS上下文切换,OS中的内存管理机制,runnig进程机制(多线程,多核cpu,...)

所以,如果我们运行一个程序2次,则必然没有理由让它们的执行时间变得相等。

答案 1 :(得分:1)

我认为这是因为g ++与C ++标准库链接,其中某些函数的实现可能与C标准库实现略有不同。

C ++标准库向后兼容C标准库,但这并不意味着可以看到性能改进。

答案 2 :(得分:1)

在当前的操作系统中,程序执行时间主要是一个非确定性变量,这意味着即使您运行相同的C代码两次,它也可以在不同的时间运行,具体取决于CPU的使用情况和操作系统的执行情况,内存管理和当前的ocupation(操作系统是否在其中一个执行中使用缓存?)等...另外,正如其他用户指出的那样,它可能还取决于标准库的实现,因为尽管非常类似的,他们是不同的语言。