GetProcessAffinityMask 将 ProcessAffinty 和 SystemAffinity 返回为
GetProcessAffinityMask returns ProcessAffinty and SystemAffinity as -1 (overflow)
该进程不是以 WOW64 运行,而是在 x64 环境中以 x64 运行。代码如下
DWORD64 dwProcessAffinity, dwSystemAffinity;
GetProcessAffinityMask(GetCurrentProcess(), &dwProcessAffinity, &dwSystemAffinity);
作为确认 IsWow64 返回假。创建的环境具有一百多个处理器。
GetProcessAffinityMask 的返回值是一个布尔值,因此如果调用返回了 TRUE,则调用成功。 有两个掩码,一个用于进程相关性,另一个用于系统相关性。 掩码中的每个位对应于一个处理器。 例如,掩码0x10表示处理器 4,掩码0x03表示处理器 0 和 1。 掩码 -1 (0xffffffffffffffff) 有 64 位集,每个处理器 0 到 63 一个。 通过使用DWORD_PTR(而不是DWORD64),可能(原始开发人员)试图确保后来的程序员将结果视为无符号十六进制序列而不是有符号整数,此外,这种类型会导致适当地调整掩码的大小(请参阅下一段)。
在开发 Windows 2003 时,拥有 32 个处理器的系统极为罕见,因此将限制为 32(对于 32 位版本)和 64(对于 64 位版本)是合理的。 即使在2008年的时间范围内,关于提高Windows 2008 R2的处理器限制仍然存在争议,Windows 2008 R2现在支持256,但可能会更高。 运行Windows 2003使用的是十年前的技术,因此可以预期当时的新技术存在一些限制。
超线程(HT)是一项有趣的技术。 添加其他硬件以支持另一个逻辑线程有一些好处。 要知道,对于操作系统,两个逻辑处理器之间没有区别,因为不能说X是物理处理器,Y是HT"附加组件"。 硬件将 X 和 Y 视为共享资源的平等伙伴,因此操作系统平等地看待它们。
作为您情况的最终不确定性,我无法告诉您 Windows 2003 将使用 80 个逻辑处理器中的哪个子集。 它可能需要 32 个 HT 对,或者可能需要物理 40 个并包含 24 个逻辑 HT 单元。 您可以通过运行GetLogicalProcessorInformation来帮助回答这个问题。
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- 什么时候在C++中返回常量引用是个好主意
- 你能重载对象变量名本身返回的内容吗
- 为什么 Serial.println(<char[]>);返回随机字符?
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 如何获取std::result_of函数的返回类型
- QueryWorkingSet总是返回false
- (C++)分析树以计算返回错误值的简单算术表达式
- 访问者访问变体并返回不同类型时出错
- 如何返回一个类的两个对象相加的结果
- OpenInventor从9.8升级到10.4.2后,GLSL纹理返回零
- lower_bound()返回最后一个元素
- "throw expression code" 1e7 >返回 d 是什么?投掷标准::overflow_error( "too big" ) : d;意味 着?
- 奇怪的(对我来说)返回声明 - 在谷歌上找不到任何关于它的信息
- 如何取消对nullptr的屏蔽,返回正确的对象
- 奇怪的结构&GCC&clang(void*返回类型)
- 架构决策:返回std::future还是提供回调
- 从python中调用C++函数并获取返回值
- 矩阵向量乘法(cublasDgemv)返回零
- 为什么模板类中的对象不能返回值