我正在阅读关于如何确定缓存内存的大小和其他信息的SO帖子: Programmatically get the cache line size?
我编写了以下程序,以便在Windows平台上找到这些信息:
#include<Windows.h>
int main()
{
BOOL retval;
SYSTEM_LOGICAL_PROCESSOR_INFORMATION *buffer = 0;
int buffersize = 0;
retval = GetLogicalProcessorInformation(buffer,(PDWORD)&buffersize);
if(retval == FALSE)
{
DWORD ret = GetLastError();
if(ret == ERROR_INSUFFICIENT_BUFFER)
{
// Use the actual length required information while allocating the memory
char* tmp = new char[buffersize];
buffer = (SYSTEM_LOGICAL_PROCESSOR_INFORMATION *)tmp;
retval = GetLogicalProcessorInformation(buffer,(PDWORD)&buffersize);
CACHE_DESCRIPTOR x;
if(retval == TRUE)
{
x = buffer->Cache;
}
delete [] tmp;
}
}
return 0;
}
然而,在运行/调试程序时,我没有获得有关缓存的所有信息(缓存级别及其类型除外)。以下是变量 x
的输出x.Level = 1
x.Associativity = 0
x.LineSize = 0
x.Size = 0
x.Type = CacheUnified
为什么以上程序不提供有关此缓存的 LineSize 和 大小 信息?我在这里做错了吗?是否有另一种方法可以在Windows平台上以编程方式查找这些信息?
我的平台信息是:
Windows 7
64 Bit Operating System
Intel i5 CPU
Visual Studio 2010
答案 0 :(得分:1)
GetLogicalProcessorInformation
会返回多个SYSTEM_LOGICAL_PROCESSOR_INFORMATION
结构。您需要在Relationship
值为RelationCache
且Cache.Level
为1的那个结构列表中搜索这些结构。您链接的帖子显示了这一点。