time命令返回执行命令所花费的时间。
如果我在命令调用的开始处(使用system())放一个"gettimeofday()",在调用的结束处放一个"gettimeofday()",并取一个不同的值,结果就不一样了。(差别也不小)
有谁能解释一下这两种用法的确切区别是什么,哪一种是计算调用执行时间的最佳方法?
谢谢。
Unix time
命令测量整个程序的执行时间,包括系统加载二进制文件及其所有库所花费的时间,以及程序完成后清理所有内容所花费的时间。
另一方面,gettimeofday
只能在程序内部工作,也就是说,在它完成加载之后(对于初始测量),在它被清理之前(对于最终测量)。
哪个是最好的?这取决于你想测量什么…div;)
这完全取决于你选择的时机。如果你想用秒来计时,那么time()
可能是你最好的选择。如果您需要比这更高的分辨率,那么我会考虑gettimeofday()
,它提供了微秒分辨率(1/1000000秒)。
如果您需要更高的分辨率,请考虑使用clock()
和CLOCKS_PER_SECOND
,只需注意clock()
很少准确描述所花费的时间量,而是使用的CPU周期数。
time()
以秒为单位返回自epoch以来的时间。
gettimeofday():
返回:
struct timeval {
time_t tv_sec; /* seconds */
suseconds_t tv_usec; /* microseconds */
};
每个时间函数精度不同。在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();