Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;_C++_C_Linux_Timer - Fatal编程技术网

C++ C++;

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! 堆栈上的可执行代码?这真是个坏主意。。。说

我已经在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!

堆栈上的可执行代码?这真是个坏主意。。。说真的,只需使用标准库函数。它在Windows XP SP2和更高版本上也会崩溃-防止数据执行。为什么要使用
.byte
而不是助记符?
uint64_t
clock_ticks()
{
  uint64_t ret;

  __asm__ volatile (".byte 0x0f, 0x31" : "=A" (ret));

  return ret;
}