使用clock()计算程序执行时间

时间:2011-09-19 21:25:31

标签: c performance time

我正在使用这样的东西来计算我的程序从开始到结束需要多长时间:

int main(){
    clock_t startClock = clock();
    .... // many codes
    clock_t endClock = clock();
    printf("%ld", (endClock - startClock) / CLOCKS_PER_SEC);
}

我的问题是,由于有多个进程在同一时间运行,比如说我的进程处于空闲的时间是多长时间,那么该时间会在我的程序中进行计时吗? / p>

基本上我关心的是,比如说有1000个时钟周期,但是我的流程只使用了500个,我会从(endClock - startClock)获得500或1000吗?

感谢。

3 个答案:

答案 0 :(得分:11)

这取决于操作系统。在Windows上,clock()衡量壁垒时间。在Linux / Posix上,它测量所有线程的组合CPU时间。

如果您想在Linux上使用壁挂时间,则应使用gettimeofday()

如果您想在Windows上使用CPU时间,则应使用GetProcessTimes()

编辑:

因此,如果您使用的是Windows,则clock() 来衡量空闲时间。

在Linux上,clock() 不会 衡量空闲时间。

答案 1 :(得分:2)

POSIX上的

clock测量cpu时间,但它通常具有极差的分辨率。相反,现代程序应使用clock_gettime CLOCK_PROCESS_CPUTIME_ID时钟ID。这将产生纳秒分辨率的结果,通常它实际上就是那么好。

答案 2 :(得分:1)

根据手册页(在Linux中)的定义,

  

clock()函数返回所用处理器时间的近似值   通过该计划。

它会尽可能准确,但正如你所说,某些时间(例如,流程切换)很难对流程进行说明,因此数字将尽可能准确,但并不完美。< / p>