C++ C++;
我已经在Windows-32位中使用此代码多年,以获取CPU时钟信号。C++ C++;,c++,c,linux,timer,C++,C,Linux,Timer,我已经在Windows-32位中使用此代码多年,以获取CPU时钟信号。 但它在64位Linux中会崩溃。有没有办法让它发挥作用?我过去所做的是这样的: unsigned char ticks_bits[3] = { 0x0F, 0x31, 0xC3}; __uint64_t ( * ticks ) () = (__uint64_t (*) ()) & ticks_bits; __uint64_t T = ticks(); // CRASH! 堆栈上的可执行代码?这真是个坏主意。。。说
但它在64位Linux中会崩溃。有没有办法让它发挥作用?我过去所做的是这样的:
unsigned char ticks_bits[3] = { 0x0F, 0x31, 0xC3};
__uint64_t ( * ticks ) () = (__uint64_t (*) ()) & ticks_bits;
__uint64_t T = ticks(); // CRASH!
堆栈上的可执行代码?这真是个坏主意。。。说真的,只需使用标准库函数。它在Windows XP SP2和更高版本上也会崩溃-防止数据执行。为什么要使用
.byte
而不是助记符?
uint64_t
clock_ticks()
{
uint64_t ret;
__asm__ volatile (".byte 0x0f, 0x31" : "=A" (ret));
return ret;
}