время против gettimeofday c ++

Команда time возвращает время, прошедшее с момента выполнения команды.

Если я добавлю gettimeofday () в начале вызова команды (используя system ()) и один в конце вызова, и получу разницу, это не так. (это тоже не очень маленькая разница)

Кто-нибудь может объяснить, какова точная разница между этими двумя видами использования и каков наилучший способ измерения времени выполнения вызова?

Благодарю.

4

Решение

Unix time Команда измеряет все время выполнения программы, включая время, которое требуется системе для загрузки вашего бинарного файла и всех его библиотек, а также время, необходимое для очистки всего, как только ваша программа будет завершена.

С другой стороны, gettimeofday может работать только внутри вашей программы, то есть после того, как она закончила загрузку (для начального измерения) и до того, как она была очищена (для окончательного измерения).

Какой из них лучше? Зависит от того, что вы хотите измерить …;)

6

Другие решения

Все зависит от того, что вы рассчитываете. Если вы пытаетесь рассчитать что-то в секунд, затем time() это, вероятно, ваш лучший выбор. Если вам нужно более высокое разрешение, чем, то я бы рассмотрел gettimeofday(), который дает до микросекунда разрешение (1/1000000 секунды).

Если вам нужно еще более высокое разрешение, рассмотрите возможность использования clock() а также CLOCKS_PER_SECONDУчтите, что clock() редко является точным описанием количества времени, а количество используемых циклов ЦП.

3

time() возвращает время с эпохи в секунд.

gettimeofday(): возвращает:

struct timeval {
time_t      tv_sec;     /* seconds */
suseconds_t tv_usec;    /* microseconds */
};
2

Каждая функция времени имеет различную точность. В 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();
0
По вопросам рекламы [email protected]