Молодогвардейцев 454015 Россия, Челябинская область, город Челябинск 89085842764
MindHalls logo

Измерить время исполнения кода на C/C++ с помощью функции clock()

Доброго времени суток! Представьте, вы написали очень крутую программу, она решает поставленную задачу, алгоритм отточен до мельчайших деталей, код отрефакторен так, что сам господь улыбнется при его чтении, все отлично! Вы пришли на работу(учебу, тусовку пограмистов) и всем его показали, и тут «Васек» спросит: «А быстро работает?». И тут вы понимаете свою ошибку! Не измерили скорость работы программы! Не потестировали с разной нагрузкой, и вообще, там может быть куча дыр связанных, которые покажутся только при стрессовой нагрузке.

Ладно, хватит. На самом деле, я просто хотел написать о том, как измерить скорость исполнения любого участка кода. Сделать это можно на любом языке программирования, каждый язык каким либо образом да сможет обратиться к системе и спросить текущее время в миллисекундах.

Я расскажу про C/C++ просто потому что именно на этих языках чаще всего измерял скорость работы кода, для самых разнообразных учебных задач. От сортировки пузырьком до топологической сортировки графов.

Специальный тип данных clock_t в C/C++

Это не что иное, как алиас(кличка, переименование) стандартного арифметического типа данных. В значение ставится количество процессорных тиков с момента его запуска. Получить это значение можно с помощью функции clock() из библиотеки <time.h>. Для того, чтобы перевести количество тиков в секунды используется константа из той же библиотеки CLOCKS_PER_SEC. Просто делим и получаем ответ.

Пример:

//Специальный тип данных из библиотеки time.h
clock_t currentTime;
//Берем текущее системное время
currentTime = clock();
//Участок кода, который нужно измерить
for(int i = 0; i < 9000; i++) {
    i *= i;
}
//Берем разницу
currentTime = clock() - currentTime;
//Переводим в секунды
currentTime = (double)currentTime / CLOCKS_PER_SEC;
  • Привет, Кирилл. Какое посоветуешь ПО для написания программ на С/С++?

    • Кузьминых Кирилл

      С тех пор, как я перешел на Linux Ubuntu, мое сердце захватил эклипс, подробнее об этом я написал здесь: http://mindhalls.ru/eclipse-ubuntu/

      • Прочитал. Хорошо. А программы, скомпилированные в эклипсе, подходят для Win? Или может там есть возможность компилировать для Win? (И для android бы не плохо)

        • Кузьминых Кирилл

          Есть возможность скомпилировать исходники под вин такой штукой, как Mingw32. В самом эклипсе кросс-платформенной компиляцией я не занимался. Как по мне, то гораздо проще просто перенести исходник с кодом и скомпилировать его на винде, ну либо скомпилить программу из-под виртуалки