C++ はすべての点で C と同じかそれよりも高速ですが、よりクリーンで優れていると多くの人が言っているのをここで聞いたことがあります。
C++ が非常に洗練されており、非常に高速であるという事実に矛盾はありませんが、重要なメモリ アクセスやプロセッサに依存するアプリケーションに代わるものは見つかりませんでした。
質問: パフォーマンスの観点から、C スタイルの配列に相当するものは C++ にありますか?
以下の例はでたらめですが、実際の問題の解決策に興味があります。私は画像処理アプリを開発していますが、そこでのピクセル処理の量は膨大です。
double t;
// C++
std::vector<int> v;
v.resize(1000000,1);
int i, j, count = 0, size = v.size();
t = (double)getTickCount();
for(j=0;j<1000;j++)
{
count = 0;
for(i=0;i<size;i++)
count += v[i];
}
t = ((double)getTickCount() - t)/getTickFrequency();
std::cout << "(C++) For loop time [s]: " << t/1.0 << std::endl;
std::cout << count << std::endl;
// C-style
#define ARR_SIZE 1000000
int* arr = (int*)malloc( ARR_SIZE * sizeof(int) );
int ci, cj, ccount = 0, csize = ARR_SIZE;
for(ci=0;ci<csize;ci++)
arr[ci] = 1;
t = (double)getTickCount();
for(cj=0;cj<1000;cj++)
{
ccount = 0;
for(ci=0;ci<csize;ci++)
ccount += arr[ci];
}
free(arr);
t = ((double)getTickCount() - t)/getTickFrequency();
std::cout << "(C) For loop time [s]: " << t/1.0 << std::endl;
std::cout << ccount << std::endl;
結果は次のとおりです。
(C++) For loop time [s]: 0.329069
(C) For loop time [s]: 0.229961
注:getTickCount()
サードパーティのライブラリからのものです。テストしたい場合は、お気に入りのクロック測定値に置き換えるだけです
アップデート:
私はVS 2010、リリースモードを使用しています。それ以外はすべてデフォルトです