GetSystemInfo(在 Windows 上)是不是总是返回逻辑处理器的数量?
Posted
技术标签:
【中文标题】GetSystemInfo(在 Windows 上)是不是总是返回逻辑处理器的数量?【英文标题】:Does GetSystemInfo (on Windows) always return the number of logical processors?GetSystemInfo(在 Windows 上)是否总是返回逻辑处理器的数量? 【发布时间】:2010-04-02 10:40:02 【问题描述】:阅读此内容,特别是阅读 Microsoft 文档,看起来它应该返回物理处理器的数量,并且您应该使用 GetLogicalProcessorInformation 来确定您拥有多少个逻辑处理器。
这是我在 SYSTEM_INFO 结构中找到的文档:http://msdn.microsoft.com/en-us/library/ms724958(v=VS.85).aspx 这是 GetLogicalProcessorInformation 上的文档:(添加空格以通过垃圾邮件过滤器) http:// msdn.microsoft.com/ en-us/ library/ ms683194.aspx
不过,进一步阅读它,在我发现的关于这个主题的大多数讨论中,开发人员说 GetSystemInfo(和 SYSTEM_INFO 结构)报告逻辑处理器的数量。
当我再次搜索时,我发现 MS 确实发布了一些关于此的信息(和一个热修复),这里(添加空格以通过垃圾邮件过滤器): http:// support. microsoft.com/ kb/936235
读起来,这听起来像是在 Xp,pre-service Pack 3 上,GetSystemInfo 报告 SYSTEM_INFO 结构中的 LOGICAL 处理器的数量。它还告诉我,在 Windows Vista 和 Windows 7 上,GetSystemInfo 应该报告物理处理器的数量(不同于 Windows XP pre-service Pack 3)。
有人知道它的实际作用吗? GetSystemInfo 是否真的以不同的方式报告物理处理器的数量(在同一台计算机上),这取决于它在哪个操作系统上运行?
【问题讨论】:
通过垃圾邮件过滤器?从什么时候开始有垃圾邮件过滤器的? 【参考方案1】:读起来,这听起来像是在 Xp,pre-service Pack 3 上,GetSystemInfo 报告 SYSTEM_INFO 结构中的 LOGICAL 处理器的数量。它还告诉我,在 Windows Vista 和 Windows 7 上,GetSystemInfo 应该报告物理处理器的数量(不同于 Windows XP pre-service Pack 3)。
没错。 Windows XP pre SP2) 不区分逻辑处理器和物理处理器。 (毕竟在 Windows XP 发布时,逻辑处理器并不存在)因此,虽然该函数返回的是操作系统认为的“物理处理器”,但与 SP2 之前没有区别。
我相信为了保持兼容性,XP SP2+ 继续报告特定功能的逻辑处理器,因为这是应用程序期望它为 XP 机器做的事情。询问“我在 XP 上吗?”更快更容易。而不是问“我在 XP SP3 上吗?”。
为什么 SP2 和 SP3 之间存在差异?尽管处理了 SP2 中物理处理器和逻辑处理器之间的差异,但这种变化只影响了平台 SKU 的计费方式。基本上,在 XP 系统中最多可以有 32 个逻辑处理器,但在 SP2 之后最多只能有 2 个物理处理器。在 SP2 之前,您只能使用 2 个逻辑处理器。但是,直到 SP3 发布,操作系统才在 API 中公开此功能。
长话短说,如果您想获得逻辑处理器(SP3 之前),只需获得物理处理器——操作系统不知道有什么区别。发布 SP3,请致电 GetLogicalProcessorInformation
。如果您想获得物理处理器,那么您想要的在 SP3 之前是不可能的(编辑: 至少使用 win32 api)。发布 SP3 当然你可以打电话给GetLogicalProcessorInformation
。
【讨论】:
以上是关于GetSystemInfo(在 Windows 上)是不是总是返回逻辑处理器的数量?的主要内容,如果未能解决你的问题,请参考以下文章
在uniapp中获取可视区域的高度(uni.getSystemInfo)
小程序开发API之获取系统信息wx.getSystemInfo()wx.getSystemInfoSync()
uniApp实现滚动视图点击锚点跳转点击左侧分栏时右侧对应内容置顶左右分栏联动getSystemInfo$nextTickcreateSelectorQueryselectAll