time 命令返回执行命令所经过的时间。
如果我在命令调用的开头(使用 system() )放置一个“gettimeofday()”,在调用结束时放置一个,并有所不同,结果就不一样了。(这也不是很小的差异)
任何人都可以解释这两种用法之间的确切区别是什么,以及哪种方法是计时执行呼叫的最佳方式?
谢谢。
time 命令返回执行命令所经过的时间。
如果我在命令调用的开头(使用 system() )放置一个“gettimeofday()”,在调用结束时放置一个,并有所不同,结果就不一样了。(这也不是很小的差异)
任何人都可以解释这两种用法之间的确切区别是什么,以及哪种方法是计时执行呼叫的最佳方式?
谢谢。
Unixtime
命令测量整个程序的执行时间,包括系统加载二进制文件及其所有库所需的时间,以及程序完成后清理所有内容所需的时间。
另一方面,gettimeofday
只能在程序内部工作,即在它完成加载之后(用于初始测量),并且在它被清理之前(用于最终测量)。
哪个最好?取决于您要测量的内容... ;)
time()
返回自纪元以来的时间(以秒为单位)。
gettimeofday():
返回:
struct timeval {
time_t tv_sec; /* seconds */
suseconds_t tv_usec; /* microseconds */
};
这完全取决于您的时间安排。如果您想在几秒钟内计时,那么time()
可能是您最好的选择。如果您需要比这更高的分辨率,那么我会考虑gettimeofday()
,它放弃了微秒分辨率(1 / 1000000 秒)。
如果您需要比这更高的分辨率,请考虑使用clock()
and CLOCKS_PER_SECOND
,请注意,这clock()
很少能准确描述所花费的时间,而是使用的 CPU 周期数。
每个时间函数都有不同的精度。在 C++11 中,您将使用 std::chrono:
using namespace std::chrono;
auto start = high_resolution_clock::now();
/* do stuff*/
auto end = high_resolution_clock::now();
float elapsedSeconds = duration_cast<duration<float>>(end-start).count();