EDIT: Извлеченный урок, всегда используйте оптимизацию при выполнении тестов...
Я решил посмотреть std::unique_ptr
в качестве альтернативы моей программе, причины чего не важны.
РЕДАКТИРОВАТЬ: После использования оптимизаций компилятора они, похоже, принимают эквивалентные количества времени.
Как я протестировал:
time_t current_time;
time(¤t_time);
srand((int)current_time);
//int* p0 = new int[NUM_TESTS];
//int* p1 = new int[NUM_TESTS];
std::unique_ptr<int[]> u_p0{ new int[NUM_TESTS] };
std::unique_ptr<int[]> u_p1{ new int[NUM_TESTS] };
for (unsigned i = 0; i < NUM_TESTS; ++i){
u_p0[i] = rand(); // use p0 and p1 for the standard ptr test
u_p1[i] = rand();
}
int result;
auto start = std::chrono::steady_clock::now();
for (unsigned index = 0; index < NUM_TESTS; ++index){
result = u_p0[index] + u_p1[index]; // use p0 and p1 for standard ptr test
}
auto end = std::chrono::steady_clock::now();
double duration = std::chrono::duration_cast<std::chrono::duration<double>>(end - start).count();
printf("time: %f\n", duration);
Моя среда:
- Windows 8.1 64bit
- MSVC-компилятор в VS2013 EDIT: использование Release
- Intel 4790k (стандартные часы)
- ОЗУ 1600 МГц.
Мои результаты (EDITED: использование оптимизированной компиляции):
// NUM_TESTS = 1,000,000
/*
STD:
0.001005
0.001001
0.001000
0.001000
0.001015
*/
/*
unique_ptr:
0.001000
0.001000
0.000997
0.001000
0.001017
*/