Я слышал, что многие ребята говорили, что С++ работает так же быстро или быстрее, чем 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()
происходит от сторонней библиотеки. Если вы хотите протестировать, просто замените свое любимое измерение часов
Update:
Я использую VS 2010, режим Release, все остальное по умолчанию