我听到很多人说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,发布模式,其他所有默认设置。