部分的にはJavaの方が高速に処理できる物もある程度で、漠然とC/C++の方が高速であると思っていました。
ですので、単純な処理を比較しながら学習をはじめました。ポインタの使い方など指摘がありましたらお願いします。
ご教授願いたい点は、さらに高速化できる場合どうしたらよいのかと、微差でも3Dであったり物理演算などの複雑な処理になると、圧倒的な差がでるものなのか。また、最適化を行わないで、java以上の速度を望めるのかです。
実行環境 os : win7 : cpu: i7-4770k : memo:16GB
java :Eclipse Java EE IDE for Web Developers:Version: Mars Release (4.5.0)
C++ : Visual Studio Express 2013 for Desktop
【c++】
clock_t start, end;
int dd[100];
start = clock();[
for (int n = 0; n < 100000000; n++){
for (int i = 0; i < 100; i++){
dd[i] = i + n;
}
}
end = clock();
printf("100億回繰り返す時間: %f秒\n", (double)(end - start) / CLOCKS_PER_SEC);
21.46秒(default)
2.60秒(実行速度の最大化(/O2)
【Java】
int[] i = new int[100];
long start = System.currentTimeMillis();
for (int n = 0; n < 100000000; n++) {
for (int t = 0; t < 100; t++) {
i[t] = t + n;
}
}
long end = System.currentTimeMillis();
System.out.println((end - start) + "ms");
2943ms
外側for文のint nの参照が遅いっぽいので改良
[c++]
clock_t start, end;
int dd[100];
int* po;
start = clock();[
for (int n = 0; n < 100000000; n++){
po = &n;
for (int i = 0; i < 100; i++){
dd[i] = i + *po;
}
}
end = clock();
printf("100億回繰り返す時間: %f秒\n", (double)(end - start) / CLOCKS_PER_SEC);
17.61秒(default)
1.77秒(実行速度の最大化(/O2)