C++ GetSystemInfo(在Windows上)是否总是返回逻辑处理器的数量?

C++ GetSystemInfo(在Windows上)是否总是返回逻辑处理器的数量?,c++,windows,winapi,hyperthreading,C++,Windows,Winapi,Hyperthreading,仔细阅读,特别是Microsoft文档,它似乎应该返回物理处理器的数量,并且您应该使用GetLogicalProcessorInformation来计算您有多少个逻辑处理器 这是我在系统信息结构中找到的文档: 下面是GetLogicalProcessorInformation上的文档:(添加空格以通过垃圾邮件过滤器) 但是,在我发现的关于这个主题的大多数讨论中,开发人员都说GetSystemInfo(和SYSTEM_INFO结构)报告逻辑处理器的数量 当我再次搜索时,我发现微软确实发布了一些关

仔细阅读,特别是Microsoft文档,它似乎应该返回物理处理器的数量,并且您应该使用GetLogicalProcessorInformation来计算您有多少个逻辑处理器

这是我在系统信息结构中找到的文档: 下面是GetLogicalProcessorInformation上的文档:(添加空格以通过垃圾邮件过滤器)

但是,在我发现的关于这个主题的大多数讨论中,开发人员都说GetSystemInfo(和SYSTEM_INFO结构)报告逻辑处理器的数量

当我再次搜索时,我发现微软确实发布了一些关于这方面的信息(以及一个热修复),这里(添加了一些空间以通过垃圾邮件过滤器):

读到这一点,听起来像是在Xp,pre service Pack 3上,GetSystemInfo报告了SYSTEM_INFO结构中逻辑处理器的数量。它还告诉我,在Windows Vista和Windows 7上,GetSystemInfo应该报告物理处理器的数量(不同于Windows XP pre service Pack 3)

有人知道它的实际用途吗? GetSystemInfo是否根据运行它的操作系统,以不同的方式报告(在同一台计算机上)物理处理器的数量

读到这一点,听起来像是在Xp,pre service Pack 3上,GetSystemInfo报告了SYSTEM_INFO结构中逻辑处理器的数量。它还告诉我,在Windows Vista和Windows 7上,GetSystemInfo应该报告物理处理器的数量(不同于Windows XP pre service Pack 3)

这是正确的。Windows XP pre SP2)不区分逻辑处理器和物理处理器。(毕竟,在Windows XP发布时,逻辑处理器并不存在)因此,虽然函数返回操作系统认为的“物理处理器”,但SP2之前没有区别

不过,我相信为了保持兼容性,xpsp2+会继续报告该特定功能的逻辑处理器,因为这是应用程序期望它为XP机器所做的。问“我在XP上吗?”比问“我在XP SP3上吗?”要快得多,也容易得多

为什么SP2和SP3之间存在差异?尽管在SP2中处理了物理处理器和逻辑处理器之间的差异,但这种变化只会影响平台SKU的计费方式。基本上,XP系统中最多可以有32个逻辑处理器,但SP2之后最多只能有2个物理处理器。在SP2之前,您只能使用2个逻辑处理器。然而,直到SP3发布,操作系统才在API中公开此功能


长话短说,如果你想得到SP3之前的逻辑处理器,只需要得到物理处理器——操作系统不知道有什么区别。在SP3之后,调用
GetLogicalProcessorInformation
。如果您想获得物理处理器,那么在SP3之前就不可能实现您想要的功能(编辑:至少在win32 API中是这样)。发布SP3当然你可以调用
GetLogicalProcessorInformation

通过垃圾邮件过滤器?从什么时候开始有垃圾邮件过滤器了?