TSC计时——高精度,低消耗

本文介绍如何使用rdtsc指令来测试代码执行效率。rdtsc指令能够返回自开机以来CPU的周期数,可用于精准测量代码片段的执行时间,精度可达纳秒级。文章提供了针对不同编译器的具体实现示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

   rdtsc指令返回的是自开机始CPU的周期数,返回的是一个64位的值EDX:EAX(高32在EDX,低32位在EAX)。OK,完全可以利用这条指令,测试我们的关注的一段代码的执行效率。

   rdtsc直接通过汇编从寄存器中获取时间,时间消耗极低(0.0Xus左右的消耗,具体X为多少与机器本身相关)。精度可以精确到ns级别。

// 返回64位的CPU circle次数
inline unsigned long long getTimeByTSC(){
#if defined(__GNUC__)
#   if defined(__i386__)
    uint64_t x;
        __asm__ volatile (".byte 0x0f, 0x31" : "=A" (x));
        return x;
#   elif defined(__x86_64__)
    uint32_t hi, lo;
    __asm__ __volatile__ ("rdtsc" : "=a"(lo), "=d"(hi));
    return ((uint64_t)lo) | ((uint64_t)hi << 32);
#   else
#       error Unsupported architecture.
#   endif
#elif defined(_MSC_VER)
    __asm {
            return __rdtsc();
        }
    #else
    #   error Other compilers not supported...
#endif
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值