Команда time возвращает время, прошедшее с момента выполнения команды.
Если я добавлю gettimeofday () в начале вызова команды (используя system ()) и один в конце вызова, и получу разницу, это не так. (это тоже не очень маленькая разница)
Кто-нибудь может объяснить, какова точная разница между этими двумя видами использования и каков наилучший способ измерения времени выполнения вызова?
Благодарю.
Unix time
Команда измеряет все время выполнения программы, включая время, которое требуется системе для загрузки вашего бинарного файла и всех его библиотек, а также время, необходимое для очистки всего, как только ваша программа будет завершена.
С другой стороны, gettimeofday
может работать только внутри вашей программы, то есть после того, как она закончила загрузку (для начального измерения) и до того, как она была очищена (для окончательного измерения).
Какой из них лучше? Зависит от того, что вы хотите измерить …;)
Все зависит от того, что вы рассчитываете. Если вы пытаетесь рассчитать что-то в секунд, затем time()
это, вероятно, ваш лучший выбор. Если вам нужно более высокое разрешение, чем, то я бы рассмотрел gettimeofday()
, который дает до микросекунда разрешение (1/1000000 секунды).
Если вам нужно еще более высокое разрешение, рассмотрите возможность использования clock()
а также CLOCKS_PER_SECOND
Учтите, что clock()
редко является точным описанием количества времени, а количество используемых циклов ЦП.
time()
возвращает время с эпохи в секунд.
gettimeofday():
возвращает:
struct timeval {
time_t tv_sec; /* seconds */
suseconds_t tv_usec; /* microseconds */
};
Каждая функция времени имеет различную точность. В C ++ 11 вы бы использовали std :: chrono:
using namespace std::chrono;
auto start = high_resolution_clock::now();
/* do stuff*/
auto end = high_resolution_clock::now();
float elapsedSeconds = duration_cast<duration<float>>(end-start).count();