用 C 中以秒为单位的时钟测量执行时间不起作用
Measuring execution time with clock in sec in C not working
我正在尝试使用 clock()
在 linux 下使用以下方法测量 C 中的执行时间:
#include <time.h>
#include <stdio.h>
#include <unistd.h>
int main(int argc, char const* argv[])
{
clock_t begin, end;
begin = clock();
sleep(2);
end = clock();
double spent = ((double)(end-begin)) / CLOCKS_PER_SEC;
printf("%ld %ld, spent: %f\n", begin, end, spent);
return 0;
}
输出为:
1254 1296, spent: 0.000042
文档说将时钟时间除以 CLOCKS_PER_SEC
以获得以秒为单位的执行时间,但这对于 2 秒 sleep
.
似乎很不正确
有什么问题?
睡眠几乎不需要执行时间。该程序只需要安排它的唤醒时间,然后让自己进入睡眠状态。当它处于休眠状态时,它不会执行。当它被唤醒时,它根本不需要做任何事情。这一切只需要一秒钟的时间。
睡眠时间更长并不需要更多的执行时间。所以当程序不执行时有 2 秒的时间段这一事实没有影响。
clock
测量 CPU 时间(至少 Linux)。休眠进程不消耗 CPU 时间。
如果您想像使用秒表一样测量时间间隔,而不管您的进程在做什么,请使用 clock_gettime
和 CLOCK_MONOTONIC
。
man clock()
有答案:
The clock() function returns an approximation of processor time used by the program.
这清楚地表明 clock()
returns 程序使用的处理器时间,而不是您期望的程序总 运行 时间,通常使用 gettimeofday
.
我正在尝试使用 clock()
在 linux 下使用以下方法测量 C 中的执行时间:
#include <time.h>
#include <stdio.h>
#include <unistd.h>
int main(int argc, char const* argv[])
{
clock_t begin, end;
begin = clock();
sleep(2);
end = clock();
double spent = ((double)(end-begin)) / CLOCKS_PER_SEC;
printf("%ld %ld, spent: %f\n", begin, end, spent);
return 0;
}
输出为:
1254 1296, spent: 0.000042
文档说将时钟时间除以 CLOCKS_PER_SEC
以获得以秒为单位的执行时间,但这对于 2 秒 sleep
.
有什么问题?
睡眠几乎不需要执行时间。该程序只需要安排它的唤醒时间,然后让自己进入睡眠状态。当它处于休眠状态时,它不会执行。当它被唤醒时,它根本不需要做任何事情。这一切只需要一秒钟的时间。
睡眠时间更长并不需要更多的执行时间。所以当程序不执行时有 2 秒的时间段这一事实没有影响。
clock
测量 CPU 时间(至少 Linux)。休眠进程不消耗 CPU 时间。
如果您想像使用秒表一样测量时间间隔,而不管您的进程在做什么,请使用 clock_gettime
和 CLOCK_MONOTONIC
。
man clock()
有答案:
The clock() function returns an approximation of processor time used by the program.
这清楚地表明 clock()
returns 程序使用的处理器时间,而不是您期望的程序总 运行 时间,通常使用 gettimeofday
.