我在这里听到很多人说 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,发布模式,其他一切默认