Teo*_*Teo 6 c++ time elapsedtime
我在Ubuntu上运行我的代码,我需要在程序中获取有关函数的已用时间.我需要一个非常准确的时间,如纳秒或至少微秒.
我读过chrono.h但它使用系统时间,我更喜欢使用CPU时间.
有没有办法做到这一点,并具有那种粒度(纳秒)?
时钟可实现的精度是不同硬件/操作系统的属性之一,这些属性仍然渗透到几乎所有语言中,说实话,在同样的情况下,我发现自己构建了一个自己的抽象,对于您的情况来说已经足够好了往往是唯一的选择。
话虽如此,为了高精度计时,我会避免使用 STL。由于它是一个没有真正实现的库标准,因此它必须创建一个抽象,这意味着以下之一:
在第二种情况下,如果您想要具有统一的行为,那么您基本上回到了开始的地方。如果您可以承受标准时钟可能出现的精度损失或偏差,那么请务必使用它。时钟是坚硬而微妙的。
如果您了解您的目标环境,您可以按照老式方式选择适当的时钟 ( #ifdef PLATFORM_ID...),例如clock_gettime(), QPC),并实现您可以获得的最精确的抽象。当然,您会受到 STL 必须做出的相同选择的限制,但通过减少平台集,您通常可以改进 lcd 要求。
如果您需要一种更理论的方法来说服自己相信这个论点,您可以考虑具有最大精度的时钟集,以及对当前时间的访问序列。对于以统一步长均匀前进的时钟,如果两次访问发生的速度快于一个时钟的最大精度,但慢于另一个时钟的最大精度,则必然会得到不同的行为。另一方面,如果您确保两次访问至少是最慢时钟的最大精度,则行为是相同的。当然,现在真实的时钟并不是均匀前进(时钟漂移),也不是以单位步长前进。