2014-07-16 2 views
0

я читал большой SO отправить о том, как определить размер и другую информацию о кэш-памяти: Programmatically get the cache line size?Почему API GetLogicalProcessorInformation() не предоставляет полную информацию о кэш-памяти?

Я написал следующую программу, чтобы узнать эту информацию на платформе 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.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

GetLogicalProcessorInformation возвращает более одной SYSTEM_LOGICAL_PROCESSOR_INFORMATION структуры. Вам необходимо выполнить поиск по списку этих структур, для которых значение Relationship равно RelationCache, а Cache.Level - 1. Сообщение, которое вы указали, показывает, как это сделать.

Смежные вопросы