【问题标题】:Using `rdtsc`: error C2065 [duplicate]使用“rdtsc”:错误 C2065 [重复]
【发布时间】:2017-10-24 10:17:05
【问题描述】:

我正在尝试使用这个种子生成随机数

int rdtsc()         
{
    __asm__ __volatile__("rdtsc");
}

但是当我尝试编译时,我得到了这个错误:

error C2065: '__asm__' : identificador no declarado
error C2146: error de sintaxis : falta ';' delante del identificador '__volatile__'

我该怎么办?除了time(null),还有其他方法可以生成真正的随机数吗?

【问题讨论】:

  • 我希望您尝试在 x64 构建中使用内联汇编,而 Visual Studio 不支持(出于某种未知原因)。请注意,您无法生成“真正的”随机数(没有一些硬件支持) - 您只能生成 pseudo-random 数。
  • 使用 random_device 或在 msdn.microsoft.com 上查找 rand_s。
  • 那是 gcc 语法。如果你使用visual studio,那么它是`__asm rdtsc;`
  • 请不要使用random标签,rdtsc与随机性无关。
  • 即使使用可以编译它的编译器 (gcc/clang/ICC),该 asm 也不安全。您需要输出操作数。

标签: c++ windows visual-studio inline-assembly


【解决方案1】:

64 位版本的 Visual C++ 不支持内联汇编,但它确实为大多数特殊指令提供了内置函数,like rdtsc

所以不需要自己编写代码。


即使你使用的是 32 位编译器,汇编语法也不是

__asm__ __volatile__("rdtsc");

只是

__asm rdtsc

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-20
    • 2014-06-10
    • 2014-01-06
    • 1970-01-01
    • 2012-11-15
    • 1970-01-01
    • 1970-01-01
    • 2011-02-15
    相关资源
    最近更新 更多