制作基准测试,我已经测试并找出了有趣的结果。
//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
所以我的问题是什么取决于运行时间?
(两者都在同一台机器上运行)
答案 0 :(得分:3)
这次取决于以下内容:OS上下文切换,OS中的内存管理机制,runnig进程机制(多线程,多核cpu,...)
所以,如果我们运行一个程序2次,则必然没有理由让它们的执行时间变得相等。
答案 1 :(得分:1)
我认为这是因为g ++与C ++标准库链接,其中某些函数的实现可能与C标准库实现略有不同。
C ++标准库向后兼容C标准库,但这并不意味着可以看到性能改进。
答案 2 :(得分:1)
在当前的操作系统中,程序执行时间主要是一个非确定性变量,这意味着即使您运行相同的C代码两次,它也可以在不同的时间运行,具体取决于CPU的使用情况和操作系统的执行情况,内存管理和当前的ocupation(操作系统是否在其中一个执行中使用缓存?)等...另外,正如其他用户指出的那样,它可能还取决于标准库的实现,因为尽管非常类似的,他们是不同的语言。