你几乎在重复另一个问题是关于函数执行时间.
正如我回答的there,很难(由于硬件!)可靠地获得某些特定函数的执行时间,特别是如果该函数花费的时间很少(例如小于一毫秒)。你原来的问题指出这些方法.
我建议使用时钟获取时间(2) with CLOCK_REALTIME
也许CLOCK_THREAD_CPUTIME_ID
gprof(1)(编译后-pg
) 与简介(3)并正在使用sampling技术,基于发送SIGPROF
信号(参见信号(7))以定期间隔(例如每 10 毫秒)从定时器设置设置定时器(2) and TIMER_PROF
;因此程序计数器会定期采样。阅读维基页面gprof并注意分析可能显著地降低运行时间。
如果您的函数在短时间内(小于一毫秒)执行,则分析会给出不精确的测量(阅读有关海森巴格).
换句话说,分析和测量短时间运行函数的时间正在改变程序的行为(这也会发生在其他操作系统上!)。你可能必须give up测量的目标恰恰 and reliably and 准确您的活动时间不打扰它。它甚至可能不会产生任何precise感觉,例如因为CPU缓存.
你可以使用gprof
没有任何-F
参数,并在需要时对文本配置文件输出进行后处理(例如,使用GNU awk)来提取您想要的信息。
顺便说一句,特定功能的精确计时可能并不重要。重要的是标杆管理整个应用程序的。
您还可以要求编译器进一步优化您的程序;如果你正在使用链接时间优化,即编译和链接 with g++ -flto -O2
,小函数的计时概念甚至可能不复存在(因为编译器和链接器可能在您不知情的情况下内联了它)。
还要考虑当前超标量处理器有如此复杂的微架构 with 指令流水线, caches, 分支预测器, 寄存器重命名, 投机执行, 乱序执行等等,对短函数进行计时的概念是未定义的。你无法预测或测量它。