#c #timer #release #clock
#c #таймер #выпуск #часы
Вопрос:
Это мой код:
// Start performance test clock
assert((start=clock())!=-1);
// Some reading and writing methods
// Get stop time
stop = clock();
cout << stop << endl;
// Calculate operation time
double result = (double)(stop-start)/CLOCKS_PER_SEC;
// Print result
cout << "--> Finished analysing in " << result << "s" << endl;
Он отлично работает, когда я отлаживаю свою программу, но когда я запускаю релизную версию,
stop получает гораздо меньшее значение, чем start, и результатом является отрицательное число.
Есть идеи?
Комментарии:
1. Выпускная версия может быть сильно оптимизирована, и, следовательно, это занимает гораздо меньше времени, чем в отладочной версии. Обычно отладочные версии не используют оптимизацию. Что произойдет, если вы отключите оптимизацию в конфигурации выпуска (обязательно повторно включите ее впоследствии)?
2. @WTP: Я сомневаюсь, что какой-либо компилятор может оптимизировать код настолько хорошо, что он может перемещаться во времени! Проблема заключалась не просто в получении меньшего значения времени, но и в получении отрицательного значения.
3. Кроме того: рассмотрите возможность использования библиотеки таймера повышения .
Ответ №1:
Назначение start
не должно быть в assert
инструкции. assert
обычно не используется в сборках релизов. Таким образом, в отладочной сборке будет выполняться оператор start=clock()
, но в сборке выпуска этого не будет. Таким образом, возможно (в зависимости от более раннего кода и объявления start
), что он не инициализирован. Обычно желательно избегать использования assert
инструкций, которые имеют побочные эффекты; это может привести к незначительным различиям / ошибкам между сборками debug и release.
Возможно, было бы лучше написать это так:
start = clock();
assert(start != -1);