改代码获取cpu的核心数和线程数是否正确#include <windows.h> #include <iostream> int CountSetBits(ULONG_PTR bitMask) { int count = 0; while (bitMask) { count += bitMask & 1; bitMask >>= 1; } return count; } int main() { DWORD bufferLength = 0; GetLogicalProcessorInformation(NULL, &bufferLength); PSYSTEM_LOGICAL_PROCESSOR_INFORMATION buffer = (PSYSTEM_LOGICAL_PROCESSOR_INFORMATION)malloc(bufferLength); GetLogicalProcessorInformation(buffer, &bufferLength); int coreCount = 0; int threadCount = 0; int processorCount = bufferLength / sizeof(SYSTEM_LOGICAL_PROCESSOR_INFORMATION); for (int i = 0; i < processorCount; i++) { if (buffer[i].Relationship == RelationProcessorCore) { coreCount++; threadCount += CountSetBits(buffer[i].ProcessorMask); } } std::cout << "CPU核心数: " << coreCount << std::endl; std::cout << "CPU线程数: " << threadCount << std::endl; free(buffer); return 0; }
时间: 2024-04-18 22:31:37 浏览: 110
C#获取CPU处理器核心数量的方法
这段代码用于获取CPU的核心数和线程数。代码的主要逻辑是通过调用Windows API函数`GetLogicalProcessorInformation`来获取与逻辑处理器相关的信息,并根据这些信息计算出核心数和线程数。
首先,代码通过调用`GetLogicalProcessorInformation`函数两次来获取所需的缓冲区大小,并动态分配相应大小的缓冲区。
然后,代码计算出缓冲区中包含的逻辑处理器信息的数量,并遍历每个逻辑处理器信息。对于每个关系为`RelationProcessorCore`的逻辑处理器,代码增加核心数的计数,并使用`CountSetBits`函数计算出该核心上的线程数,并进行累加。
最后,代码输出核心数和线程数,并释放动态分配的缓冲区。
需要注意的是,此代码仅适用于Windows操作系统。
阅读全文