C 在windows XP上获取总内存

C 在windows XP上获取总内存,c,windows,C,Windows,当然。所以我的目标是获得WindowsXP-10上的总系统内存。我可以在windows vista及更高版本上使用GetPhysicallyInstalledSystemMemory。但是,在windows XP上,我必须使用GlobalMemoryStatusEx,它不考虑硬件保留内存。例如,它将报告511Mb而不是512Mb。关于如何解决这个问题有什么线索吗 这是我到目前为止所拥有的。再一次。它只在XP上不起作用 #define _WIN32_WINNT 0x501 #include &l

当然。所以我的目标是获得WindowsXP-10上的总系统内存。我可以在windows vista及更高版本上使用GetPhysicallyInstalledSystemMemory。但是,在windows XP上,我必须使用GlobalMemoryStatusEx,它不考虑硬件保留内存。例如,它将报告511Mb而不是512Mb。关于如何解决这个问题有什么线索吗

这是我到目前为止所拥有的。再一次。它只在XP上不起作用

#define _WIN32_WINNT  0x501
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

typedef (CALLBACK *GPIM)(PULONGLONG);

int GetTotalRam()
{
    unsigned long long total;
    FARPROC FuncAddr = GetProcAddress(GetModuleHandle("kernel32.dll"), "GetPhysicallyInstalledSystemMemory");
    if (FuncAddr)
    {
        ((GPIM)FuncAddr)(&total);
    }
    else
    {
        MEMORYSTATUSEX ms;
        memset(&ms, 0, sizeof(MEMORYSTATUSEX));
        ms.dwLength = sizeof(MEMORYSTATUSEX);
        GlobalMemoryStatusEx(&ms);
        total = ms.ullTotalPhys / 1024;
    }
    total /= 1024;
    return (int)total;
}
#定义_WIN32_WINNT 0x501
#包括
#包括
#包括
typedef(回调*GPIM)(普隆隆);
int GetTotalRam()
{
无符号长-长总计;
FARPROC FuncAddr=GetProcAddress(GetModuleHandle(“kernel32.dll”),“GetPhysicallyInstalledSystemMemory”);
if(FuncAddr)
{
((GPIM)FuncAddr)(&total);
}
其他的
{
记忆状态质谱;
memset(&ms,0,sizeof(MEMORYSTATUSEX));
ms.dwLength=sizeof(memoryStatuex);
GlobalMemoryStatusEx(&ms);
总计=ms.ullTotalPhys/1024;
}
总数/=1024;
返回(int)总数;
}

请解释为什么511Mb不够好。你说得对。512Mb中的511Mb可以。但是当你有16Gb的内存时,你会得到15.8或15.9GB,而且看起来很糟糕。请解释为什么511Mb不够好。你的权利。512Mb中的511Mb可以。但是当你有16Gb的内存时,你会得到15.8或15.9GB,而且看起来很糟糕