我正在尝试在 Windows 中使用(相当新的)GetLogicalProcessorInformationEx 函数。它给出的 ReturnLength 没有意义。
较旧的 GetLogicalProcessorInformation 给出了合理的结果......
ReturnLength = 0;
Result = GetLogicalProcessorInformation(NULL, &ReturnLength);
printf("GLPI (%d): %d %d\n",
Result,
sizeof(SYSTEM_LOGICAL_PROCESSOR_INFORMATION),
ReturnLength);
这是输出(2 核,64 位,Win7 机器): GLPI (0): 32 416
换句话说,该函数将使用 416/32=13 SYSTEM_LOGICAL_PROCESSOR_INFORMATION 结构填充我传递的缓冲区。
对于 GetLogicalProcessorInformationEx,这是我的电话...
ReturnLength = 0;
Result = GetLogicalProcessorInformationEx(RelationProcessorCore,
NULL, &ReturnLength);
printf("GLPIX (%d): %d %d %d\n",
Result,
sizeof(PROCESSOR_RELATIONSHIP),
sizeof(SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX),
ReturnLength);
这是输出(2 核,64 位,Win7 机器): GLPIX (0): 40 80 96
Microsoft 文档 (http://msdn.microsoft.com/en-us/library/windows/desktop/dd405488(v=vs.85).aspx) 表明该函数将返回 PROCESSOR_RELATIONSHIP 或 SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX 结构,具体取决于第一个参数的值。ReturnLength 表明它也不会返回,尽管 - 96 不能被 sizeof(PROCESSOR_RELATIONSHIP) 或 sizeof(SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX) 整除。
我还为第一个参数尝试了 RelationAll,它给出了 768 的 ReturnLength - 也不是倍数或 40 或 80。
任何人都可以解释一下吗?