你好stackoverflow用户,这是我的第一个问题,所以如果我的表达方式有任何错误,请指出,谢谢
我用 Java 和 C++ 编写了这个简单的计算函数
爪哇:
long start = System.nanoTime();
long total = 0;
for (int i = 0; i < 2147483647; i++) {
total += i;
}
System.out.println(total);
System.out.println(System.nanoTime() - start);
C++:
auto start = chrono::high_resolution_clock::now();
register long long total = 0;
for (register int i = 0; i < 2147483647; i++)
{
total += i;
}
cout << total << endl;
auto finish = chrono::high_resolution_clock::now();
cout << chrono::duration_cast<chrono::nanoseconds>(finish - start).count() << endl;
软件: - JDK8u11 - Microsoft Visual C++ 编译器 (2013)
结果:
爪哇:2305843005992468481 1096361110
C++:2305843005992468481 6544374300
计算结果是一样的,这很好,但是打印的 nano time 显示 Java 程序需要 1 秒,而在 C++ 中需要 6 秒来执行
我做 Java 已经有一段时间了,但是我是 C++ 新手,我的代码有什么问题吗?还是 C++ 通过简单的计算比 Java 慢的事实?
另外,我在我的 C++ 代码中使用了“register”关键字,希望它能带来性能提升,但执行时间并没有什么不同,有人可以解释一下吗?
编辑:我的错误是C++编译器设置没有优化,输出设置为x32,应用/O2 WIN64并删除DEBUG后,程序只花了0.7秒执行
JDK默认对输出进行优化,但是VC++不是这样,默认有利于编译速度,不同的C++编译器的结果也不同,有些会在编译时间内计算循环的结果,导致执行时间极短(大约 5 微秒)
注意:在适当的条件下,C++ 程序在这个简单的测试中会比 Java 表现得更好,但是我注意到许多运行时安全检查被跳过,违反了它作为“安全语言”的调试意图,我相信 C++ 在大型数组测试,因为它没有边界检查