如何获得C程序的执行时间?

raj*_*123 5 c time execution

我正在为我的C程序使用时钟功能来打印当前程序的执行时间。我在输出中得到的时间是错误的。我想以秒,毫秒和微秒为单位显示时间。

#include <stdio.h> 
#include <unistd.h>
#include <time.h> 
int main() 
{ 
    clock_t start = clock(); 
    sleep(3);
    clock_t end = clock(); 
    double time_taken = (double)(end - start)/CLOCKS_PER_SEC; // in seconds 

    printf("time program took %f seconds to execute \n", time_taken); 
    return 0; 
} 


time ./time
time program took 0.081000 seconds to execute
real    0m3.002s
user    0m0.000s
sys     0m0.002s
Run Code Online (Sandbox Code Playgroud)

我希望输出大约3秒,但是显示错误。如您所见,如果我使用Linux命令时间运行该程序,我将得到正确的时间,我想使用我的c程序显示相同的时间。

chq*_*lie 6

与流行的看法相反,该clock()函数检索 CPU 时间,而不是经过的时钟时间,因为名称令人困惑可能会让人相信。

这是来自 C 标准的语言:

7.27.2.1clock函数

概要

#include <time.h>
clock_t clock(void);
Run Code Online (Sandbox Code Playgroud)

描述

clock函数确定使用的处理器时间。

退货

clock函数返回实现对程序使用的处理器时间的最佳近似值,自一个实现定义的时代开始,仅与程序调用相关。要确定以秒为单位的时间,应将时钟函数返回的值除以宏的值CLOCKS_PER_SEC。如果使用的处理器时间不可用,则该函数返回值(clock_t)(?1)。如果无法表示该值,则该函数返回一个未指定的值。

要检索经过的时间,您应该使用以下方法之一:

  • time()分辨率为 1 秒的函数
  • timespec_get()功能可能更精确,但可能并非在所有系统上都可用
  • gettimeofday()linux系统上可用的系统调用
  • clock_gettime()功能。

请参阅UNIX 中的挂钟时间、用户 CPU 时间和系统 CPU 时间具体是什么?有关此主题的更多信息。

这是使用的修改版本gettimeoday()

#include <time.h>
clock_t clock(void);
Run Code Online (Sandbox Code Playgroud)

输出:

time 程序执行时间为 3.005133 秒