ActiveProcessorCount:活動處理器組中的數量。
2.什麼的錯誤在我的代碼片段?
絕對所有
代碼示例如何與GetLogicalProcessorInformationEx
void TestLP2()
{
ULONG rcb = 0x100, Size, err;
PVOID buf;
BOOL fOk;
do
{
if (buf = new UCHAR[rcb])
{
fOk = GetLogicalProcessorInformationEx(RelationAll, (PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX)buf, &rcb);
err = GetLastError();
if (fOk)
{
if (rcb)
{
union {
PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX pslpi;
PBYTE pb;
};
pslpi = (PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX)buf;
do
{
DumpLPI(pslpi);
Size = pslpi->Size;
pb += Size;
} while (rcb -= Size);
}
}
delete [] buf;
}
else
{
break;
}
} while (!fOk && err == ERROR_INSUFFICIENT_BUFFER);
}
工作DumpLPI
實現可以是下一個:輸出的
void DumpLPI(PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX pslpi)
{
union {
PPROCESSOR_RELATIONSHIP Processor;
PNUMA_NODE_RELATIONSHIP NumaNode;
PCACHE_RELATIONSHIP Cache;
PGROUP_RELATIONSHIP Group;
};
Processor = &pslpi->Processor;
switch (pslpi->Relationship)
{
case RelationProcessorPackage:
DbgPrint("RelationProcessorPackage(GroupCount = %u)\n", Processor->GroupCount);
if (WORD GroupCount = Processor->GroupCount)
{
PGROUP_AFFINITY GroupMask = Processor->GroupMask;
do
{
DbgPrint("group<%u> Mask = %08x\n", GroupMask->Group, GroupMask->Mask);
} while (GroupMask++, --GroupCount);
}
break;
case RelationProcessorCore:
DbgPrint("RelationProcessorCore(%x): Mask = %08x\n", Processor->Flags, Processor->GroupMask->Mask);
break;
case RelationGroup:
DbgPrint("RelationGroup(%u/%u)\n", Group->ActiveGroupCount, Group->MaximumGroupCount);
if (WORD ActiveGroupCount = Group->ActiveGroupCount)
{
PPROCESSOR_GROUP_INFO GroupInfo = Group->GroupInfo;
do
{
DbgPrint("<%u/%u %08x>",
GroupInfo->ActiveProcessorCount,
GroupInfo->MaximumProcessorCount,
GroupInfo->ActiveProcessorMask);
} while (GroupInfo++, --ActiveGroupCount);
}
break;
case RelationCache:
DbgPrint("Cache L%u (%x, %x) %x\n", Cache->Level, Cache->LineSize, Cache->CacheSize, Cache->Type);
break;
case RelationNumaNode:
DbgPrint("NumaNode<%u> (group = %u, mask = %08x)\n", NumaNode->NodeNumber, NumaNode->GroupMask.Group, NumaNode->GroupMask.Mask);
break;
default:
DbgPrint("unknown Relationship=%x\n", pslpi->Relationship);
}
}
例如:
RelationProcessorPackage(GroupCount = 1)
group<0> Mask = 0000000f
RelationProcessorCore(1): Mask = 00000003
Cache L1 (40, 8000) 2
Cache L1 (40, 8000) 1
Cache L2 (40, 40000) 0
Cache L3 (40, 300000) 0
RelationProcessorCore(1): Mask = 0000000c
Cache L1 (40, 8000) 2
Cache L1 (40, 8000) 1
Cache L2 (40, 40000) 0
NumaNode<0> (group = 0, mask = 0000000f)
RelationGroup(1/1)
<4/4 0000000f>
你爲什麼分配0字節?網上有很多示例顯示如何執行此操作。你爲什麼要使用LocalAlloc? –