当前位置:  开发笔记 > 编程语言 > 正文

用于在C中查找函数调用中的已用时间的计时器

如何解决《用于在C中查找函数调用中的已用时间的计时器》经验,为你挑选了1个好方法。

我想计算在C中函数调用期间经过的时间,精度为1纳秒.

C中是否有可用的定时器功能?

如果是,请提供示例代码段.

伪代码

Timer.Start()
foo();
Timer.Stop()
Display time elapsed in execution of foo()

环境细节: - 在RHEL机器上使用gcc 3.4编译器



1> FreeMemory..:

请问您使用的是哪种处理器?如果您使用的是x86处理器,则可以查看时间戳计数器(tsc).此代码段:

#define rdtsc(low,high) \
     __asm__ __volatile__("rdtsc" : "=a" (low), "=d" (high))

将使CPU已经运行周期的数目lowhigh分别(预计2个longS;可以将结果存储在一个long long int)如下:

inline void getcycles (long long int * cycles)
{
  unsigned long low;
  long high;
  rdtsc(low,high);
  *cycles = high; 
  *cycles <<= 32; 
  *cycles |= low; 
}

请注意,这将返回CPU执行的周期数.您需要获得CPU速度,然后计算出每ns的循环次数,以获得经过的ns数.

为了做到这一点,我已经解析了"cpu MHz"字符串/proc/cpuinfo,并将其转换为小数.在那之后,它只是一点数学,并记住1MHz =每秒1,000,000个周期,并且有10亿ns /秒.

推荐阅读
mobiledu2402852413
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有