я читал большой 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