Найдите время выполнения программы на C
В этом посте будет обсуждаться, как найти время выполнения программы C в средах Windows и Linux.
Существует четыре широко используемых метода определения времени выполнения программы на C:
1. Использование clock() функция
Мы можем использовать clock() функция, предоставляемая заголовочный файл для расчета времени ЦП, потребляемого задачей в приложении C. Он возвращает clock_t type, в котором хранится общее количество тактов часов.
Чтобы вычислить общее количество прошедших секунд, нам нужно разделить общее количество прошедших тактов часов на CLOCKS_PER_SEC макрос (также присутствует в ) как показано ниже:
#include
#include
// основная функция для определения времени выполнения программы на C
// для хранения времени выполнения кода
double time_spent = 0.0 ;
clock_t begin = clock ( ) ;
// делаем здесь что-нибудь
clock_t end = clock ( ) ;
// рассчитать прошедшее время, найдя разницу (end — begin) и
// деление разницы на CLOCKS_PER_SEC для перевода в секунды
time_spent += ( double ) ( end — begin ) / CLOCKS_PER_SEC ;
printf ( «The elapsed time is %f seconds» , time_spent ) ;
Выход (может варьироваться):
The elapsed time is 0.000014 seconds
Обратите внимание, что clock() Функция не возвращает фактическое количество прошедшего времени, а возвращает количество времени, которое потребовалось базовой операционной системе для запуска процесса. Другими словами, фактическое время настенных часов может быть намного больше.
2. Использование time() функция
The заголовок также предоставляет time() функция, которая возвращает общее количество секунд, прошедших с начала Эпохи (00:00:00 UTC, 1 января 1970 г.). Он принимает указатель на time_t в качестве аргумента, который обычно передается как NULL и возвращает time_t тип. Если аргумент не NULL , то возвращаемое значение также сохраняется в памяти, на которую указывает аргумент.
Его использование аналогично clock() функцию, как показано ниже:
Измерить время исполнения кода на C/C++ с помощью функции clock()
Доброго времени суток! Представьте, вы написали очень крутую программу, она решает поставленную задачу, алгоритм отточен до мельчайших деталей, код отрефакторен так, что сам господь улыбнется при его чтении, все отлично! Вы пришли на работу(учебу, тусовку пограмистов) и всем его показали, и тут «Васек» спросит: «А быстро работает?». И тут вы понимаете свою ошибку! Не измерили скорость работы программы! Не потестировали с разной нагрузкой, и вообще, там может быть куча дыр связанных, которые покажутся только при стрессовой нагрузке.
Ладно, хватит. На самом деле, я просто хотел написать о том, как измерить скорость исполнения любого участка кода. Сделать это можно на любом языке программирования, каждый язык каким либо образом да сможет обратиться к системе и спросить текущее время в миллисекундах.
Я расскажу про C/C++ просто потому что именно на этих языках чаще всего измерял скорость работы кода, для самых разнообразных учебных задач. От сортировки пузырьком до топологической сортировки графов.
Специальный тип данных clock_t в C/C++
Это не что иное, как алиас(кличка, переименование) стандартного арифметического типа данных. В значение ставится количество процессорных тиков с момента его запуска. Получить это значение можно с помощью функции clock() из библиотеки . Для того, чтобы перевести количество тиков в секунды используется константа из той же библиотеки 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;
Как замерить время выполнения части кода в C?
Если говорить о мире Unix, то можно использовать gprof профайлер.
Отслеживать
ответ дан 28 окт 2010 в 19:30
Nicolas Chabanovsky Nicolas Chabanovsky
51.2k 86 86 золотых знаков 266 266 серебряных знаков 505 505 бронзовых знаков
Не могли бы вы объяснить по-подробней?
30 апр 2011 в 18:51
#include #include int add(int x, int y) < return x + y; >double measure () < struct tms begin, end; /* Начать измерение */ times(&begin); /* Выполнить измеряемое действие */ add(0, 0); /* Завершить измерение */ times(&end); return (double)(end.tms_utime - begin.tms_utime); >
Отслеживать
ответ дан 29 окт 2010 в 11:00
34.5k 25 25 золотых знаков 97 97 серебряных знаков 214 214 бронзовых знаков
Если пишите для Win32, то лучше всего воспользоваться высокоточными функциями, такими, как, например, QueryPerformanceCounter или timeGetTime. Для Linux — тоже копать в направлении счетчиков производительности процессора. Я лично для реализации использовал QueryPerformanceCounter и частично исходный код вот этой статьи:
-там можно разобраться что и как работает. К сожалению, это было давно, и сейчас у меня нет на руках тех исходников.
Однако, для тривиальных функций, как в Вашем примере, я не вижу особого смысла для замера производительности (наверное, это просто взято как пример).
Измерить время выполнения программы
Программа считывает два числа из текстового файла, проводит расчеты и выводит результат и время выполнения в другой текстовый файл, только вместо времени выполнения программы выводится одно из чисел полученных в предыдущих расчетах.
Помогите пожалуйста разобраться, что не так?
Лучшие ответы ( 1 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Измерить время выполнения сортировки
Всем привет) Хелпаните с задачей: Измерить время выполнения сортировки(в наносек-х), пытался с.
Задать время выполнения программы
Нужно, чтобы некоторый код выполнялся в течение 5 минут, а после выводились результаты его.
Как ограничить время выполнения программы?
Добрый день! Задали написать программу, следующего содержания: "Для натурального числа сумма.
Задание размера массива после его объявления во время выполнения программы
Ребята, подскажите, как задать размер массиву во время выполнения. Я напишу пример на java — нужно.