在程序中获取函数的真实,用户和系统时间

时间:2016-09-22 23:24:58

标签: c function time timing

寻求有关获取C程序中函数的真实,用户,系统时间的帮助。例如,读取文件需要多长时间。我一直在查看#include并使用带有-p标志的time()函数,但我正在执行此操作。我想我的问题是,如果我有:

time_t total_time;
time_t start, end;

start = time(-p, &start);

<some code>

end = time(-p, &end);

printf("real = %e, user = %S, sys = %S\n", ???????????);

我理解三次之间的差异,只是不知道获得结果的正确执行。

2 个答案:

答案 0 :(得分:0)

检查time()的返回值:

  

返回的值通常表示自UTC时间1970年1月1日00:00(即当前的unix时间戳)以来的秒数。虽然库可能使用不同的时间表示:可移植程序不应直接使用此函数返回的值,但始终依赖于对标准库的其他元素的调用将它们转换为可移植类型(例如localtime,gmtime或difftime)

要显示实时,请阅读此answer

对于用户和系统,请阅读:How to measure user/system cpu time for a piece of program?

答案 1 :(得分:0)

可以通过在之前和之后调用time()并减去结果来确定实际经过的时间。如果你想要便携,你应该使用difftime函数来执行减法,因为time()的返回值不能保证是一个数字。

但是,如果您使用的是POSIX兼容系统,time()的返回值将是自纪元以来的秒数,因此您可以减去它们以获得经过的秒数。

如果您想要更高分辨率的结果,可以使用gettimeofday(),它会返回一个包含毫秒分辨率时间的timeval结构。

访问用户的最便携方式&amp;系统时间是调用clock() C库函数,但是你在@gsamaras的评论中已经注意到你的系统没有这个函数。

根据您使用的系统,您可以调用系统函数times()getrusage()getrusage()会更容易使用,因为它将值返回为timeval结构,其中包含秒和毫秒。如果你想要实际的时间单位,times()会返回你需要转换的时钟标记。

如果您的程序是线程化的,并且您正在使用Linux,getrusage()提供了额外的优势:您可以获得当前线程的资源消耗。

无论您选择哪种功能,该过程都将获得初始读数,最终读数,并减去两个结果以查看您的功能消耗的时间。