Как понять, достаточно ли быстро работает фрагмент кода? Как узнать, насколько быстро работает данная операция? Во многих ситуациях, связанных с измерением времени, можете просто посмотреть на часы (секундомер, стенные или наручные часы). Это не научно и не точно, но, если не произойдет чего-то непредвиденного, вы можете прийти к выводу, что программа работает достаточно быстро. Тем не менее этот подход неприемлем для тех, кого беспокоят вопросы производительности программ.
time
, чтобы система вывела продолжительность ее выполнения. Можете также использовать команду time
, чтобы выяснить, сколько времени заняла компиляция исходного файла x.cpp
. Обычно компиляция выполняется по команде
g++ x.cpp
Для того чтобы измерить продолжительность компиляции, поставьте перед ней слово time
.
time g++ x.cpp
Система откомпилирует файл x.cpp
и выведет на экран затраченное время. Это простой и эффективный способ измерения продолжительности работы небольших программ. Не забудьте выполнить измерения несколько раз, потому что на продолжительность выполнения программы могут влиять другие действия, выполняемые на вашем компьютере. Если вы получите примерно три одинаковых ответа, то можете им доверять.
clock
из стандартной библиотеки, позволяющей измерить продолжительность выполнения функции do_something
.
#include
#include
using namespace std;
int main
{
int n = 10000000; // повторяем do_something n раз
clock_t t1 = clock; // начало отсчета
if (t1 == clock_t(–1)) { // clock_t(–1) значит "clock
// не работает"
cerr << "Извините, таймер не работает \n";
exit(1);
}
for (int i = 0; i
clock_t t2 = clock; // конец отсчета
if (t2 == clock_t(–1)) {
cerr << "Извините, таймер переполнен \n";
exit(2);
}
cout << "do_something " << n << " раз занимает "
<< double(t2–t1)/CLOCKS_PER_SEC << " сек "
<< " (точность измерений: "
<< CLOCKS_PER_SEC << " сек)\n";
}
Функция clock
возвращает результат типа clock_t
. Явное преобразование double(t2–t1)
перед делением необходимо, поскольку тип clock_t
может быть целым число. Точный момент запуска функции clock
зависит от реализации; функция clock
предназначена для измерения интервалов времени в пределах одного сеанса выполнения программы. При значениях t1
и t2
, возвращаемых функцией clock
, число double(t2–t1)/CLOCKS_PER_SEC
является наилучшим приближением времени, прошедшего между двумя вызовами функции clock
и измеренного в секундах. Макрос CLOCKS_PER_SEC
(тактов в секунду) описан в заголовке
.
Если функция clock
для процессора не предусмотрена или временной интервал слишком длинный, функция clock
возвращает значение clock_t(–1)
. Функция clock
предназначена для измерения временных интервалов, длящихся от доли секунды до нескольких секунд. Например, если (что бывает довольно часто) тип clock_t
представляет собой 32-битовый тип int
со знаком и параметр CLOCKS_PER_SEC
равен 1000000
, мы можем использовать функцию clock
для измерения интервалов времени продолжительностью от 0 до 2000 секунд (около половины часа), выраженных в микросекундах.
26.7. Ссылки