Я использую следующий код для вычисления времени выполнения в миллисекундах.
struct timespec tp;
if (clock_gettime (CLOCK_REALTIME, &tp) == 0)
return ((tp.tv_sec * 1000000000) + tp.tv_nsec);
else
return ;
Подскажите, пожалуйста, правильно ли это?
Назовем эту функцию comptime_nano ().
Теперь я пишу следующий код в main () для проверки времени выполнения следующих операций.
unsigned long int a, b, s1, s3;
a = (unsigned long int)(1) << 63;
b = (unsigned long int)(1) << 63;
btime = comptime_nano();
s1 = b >> 30;
atime = comptime_nano();
printf ("Time =%ld for %lu\n", (atime - btime), s1);
btime = comptime_nano();
s3 = a >> 1;
atime = comptime_nano();
printf ("Time =%ld for %lu\n", (atime - btime), s3);
К моему удивлению, первая операция занимает примерно в 4 раза больше времени, чем вторая. Опять же, если я изменю относительный порядок этих операций, соответствующие временные рамки резко изменятся.
Пожалуйста, прокомментируйте ...