为什么GetLogicalProcessorInformation()API不提供有关缓存的完整信息?

时间:2014-07-16 03:45:24

标签: windows visual-studio-2010 caching

我正在阅读关于如何确定缓存内存的大小和其他信息的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

1 个答案:

答案 0 :(得分:1)

GetLogicalProcessorInformation会返回多个SYSTEM_LOGICAL_PROCESSOR_INFORMATION结构。您需要在Relationship值为RelationCacheCache.Level为1的那个结构列表中搜索这些结构。您链接的帖子显示了这一点。