Clang决定给我一个错误。它决定对我大吼大叫使用__rdtscp(这不是我的代码,我不知道那是什么)
error: use of undeclared identifier '__rdtscp'
i2 = __rdtscp(&ui2);
^
error: use of undeclared identifier '__rdtscp'
i3 = __rdtscp(&ui3);
^
error: use of undeclared identifier '__rdtscp'
i2 = __rdtscp(&ui2);
^
error: use of undeclared identifier '__rdtscp'
i3 = __rdtscp(&ui3);
^
error: use of undeclared identifier '__rdtscp'
i2 = __rdtscp(&ui2);
^
error: use of undeclared identifier '__rdtscp'
i3 = __rdtscp(&ui3);
我真想弄清楚为什么Clang不喜欢我。有谁知道__rdtscp是什么以及如何让它冷静下来呢?
答案 0 :(得分:3)
假设您正在为x86进行编译,那么内置__rdtscp
函数。如果您正在为其他处理体系结构进行编译,那么它将无法使用,因为rdtscp
基本上是x86指令的名称。
此代码适用于我,截至昨天使用clang ++ 3.5.0:
#include <iostream>
#include <x86intrin.h>
int main()
{
unsigned int dummy;
unsigned long long t1 = __rdtscp(&dummy);
std::cout << "Hello" << std::endl;
unsigned long long t2 = __rdtscp(&dummy);
std::cout << "Time: " << t2 - t1 << std::endl;
}
您需要包含x86intrin.h
才能从__rdtscp
转换为编译器知道的实际__builtin_ia32_rdtscp
函数。
答案 1 :(得分:0)
__rdtscp()
on some platforms是RDTSCP指令的内在编译器,它是最近引入的RDTSC(&#34;读取时间戳计数器&#34;)的序列化版本,用于用于计算处理器周期数,例如在基准测试或定时器代码中。
Here is a way是一种在使用gcc时在C或C ++中使用rdtscp()
的方法。也许同样的方法适用于Clang?