从MSDN实现__cpuid的例子给出了疯狂的大数字

Implementing __cpuid example from MSDN gives insanely large numbers

本文关键字:数字 疯狂 MSDN 实现 cpuid      更新时间:2023-10-16

我正在快速将此代码http://msdn.microsoft.com/en-us/library/hskdteyh(v=vs.80).aspx实现到我的程序中,因为我需要获得一些CPU信息,但是当我到达这部分代码时:

__cpuid(CPUInfo, 0x80000000);
    nExIds = CPUInfo[0];

下一个for循环开始永远滚动,所以我设置了一个断点,命中计数继续增长,结果nExIDs被设置为2147483656,这将使其余代码的执行时间即使不是几周也要几个小时(所以这显然是一个错误)。它没有说该功能已弃用或其他什么,所以它不应该给我带来麻烦,对吗?如果它与*__cpuid*函数相关,我在Windows 7 Home Premium 64位上在VAIO笔记本电脑上运行它。我正在查询的CPU是一个Intel(R) Core(TM) i5 CPU M 460 @ 2.53GHz2内核(4逻辑)。也许我需要传递一个不同的值,而不是0x80000000?但是我怎么确定多少呢?

好吧,我弄清楚了,在MSDN的例子有一个bug -如果功能不支持它设置为负值,但nExIds是一个unsigned int,所以当你设置它为负无效值,它自动被设置为2147483656。所以我必须使用int而不是unsigned int