прошедшее время в C - PullRequest
       27

прошедшее время в C

4 голосов
/ 30 мая 2011
#include <time.h> 
time_t start,end; 
time (&start);
//code here
time (&end); 
double dif = difftime (end,start); 
printf ("Elasped time is %.2lf seconds.", dif ); 

Я получаю 0,000 за время начала и окончания. Я не понимаю источник ошибки.

Также лучше использовать время (начало) и время (конец) или начало = часы () и конец = часы () для вычисления истекшего времени.

Ответы [ 6 ]

7 голосов
/ 30 мая 2011

В большинстве (практически во всех?) Системах time() имеет гранулярность только одну секунду, поэтому любые доли секунды не могут быть измерены с его помощью.Если вы работаете в Unix, попробуйте вместо этого использовать gettimeofday.

4 голосов
/ 30 мая 2011

Если вы хотите использовать clock(), убедитесь, что вы понимаете, что он измеряет только процессорное время .Кроме того, чтобы преобразовать в секунды, вам нужно разделить на CLOCKS_PER_SEC.

2 голосов
/ 30 мая 2011

Короткие выдержки из кода обычно не занимают достаточно много времени для запуска в целях профилирования. Обычная техника - повторять вызов много-много раз (миллионы), а затем делить полученную дельту времени на счетчик итераций. Псевдо-код:

count = 10,000,000

start = readCurrentTime()

loop count times:
    myCode()

end = readCurrentTime()

elapsedTotal = end - start
elapsedForOneIteration = elapsedTotal / count

Если вам нужна точность, вы можете не учитывать накладные расходы на цикл. Например:

loop count times:
    myCode()
    myCode()
and measure elapsed1 (2 x count iterations + loop overhead)

loop count times:
    myCode()
and measure elapsed2 (count iterations + loop overhead)

actualElapsed = elapsed1 - elapsed2
(count iterations -- because rest of terms cancel out)
0 голосов
/ 30 мая 2011

Ваш код выполняется менее секунды.

0 голосов
/ 30 мая 2011

Код, который вы используете между измерениями, работает слишком быстро.Только что попробовал ваш код печатать цифры от 0 до 99 999, и я получил

Время ожидания составляет 1,00 секунды.

0 голосов
/ 30 мая 2011

time имеет (в лучшем случае) второе разрешение. Если ваш код работает намного меньше, вы вряд ли увидите разницу.

Используйте профилировщик (например, gprof на * nix, Instruments на OS X; для Windows см. « Профилирование кода C в Windows при использовании Eclipse ») для определения времени вашего кода .

...