こんにちは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
計算結果は同じですが、出力されたナノ時間は、Java プログラムが 1 秒かかるのに対し、C++ では実行に 6 秒かかることを示しています。
私はかなり長い間 Java を使用していますが、C++ は初めてです。コードに問題はありますか? それとも単純な計算で C++ が Java よりも遅いのは事実ですか?
また、パフォーマンスが向上することを期待して、C++ コードで「登録」キーワードを使用しましたが、実行時間はまったく変わりません。誰かがこれを説明できますか?
編集: ここでの私の間違いは、C++ コンパイラの設定が最適化されておらず、出力が x32 に設定されていることです。/O2 WIN64 を適用して DEBUG を削除した後、プログラムの実行には 0.7 秒しかかかりませんでした
JDK はデフォルトで出力に最適化を適用しますが、デフォルトでコンパイル速度を優先する VC++ には当てはまりません。また、C++ コンパイラによって結果が異なります。コンパイル時にループの結果を計算するものもあり、実行時間が非常に短くなります (約 5 マイクロ秒)
注: 適切な条件が与えられれば、C++ プログラムはこの単純なテストで Java よりも優れたパフォーマンスを発揮しますが、多くの実行時の安全性チェックがスキップされ、「安全な言語」としてのデバッグの意図に違反していることに気付きました。境界チェックがないため、大規模な配列テスト