可用和总RAM总是相同的

时间:2014-12-01 12:13:19

标签: python windows memory ctypes ram

所以我试图通过python获取我的PC的可用内存和总RAM。这就是我现在所拥有的:

def get_memory_status():
    kernel32 = ctypes.windll.kernel32
    c_ulong = ctypes.c_ulong
    class MEMORYSTATUS(ctypes.Structure):
        _fields_ = [
            ("dwLength", c_ulong),
            ("dwMemoryLoad", c_ulong),
            ("dwTotalPhys", c_ulong),
            ("dwAvailPhys", c_ulong),
            ("dwTotalPageFile", c_ulong),
            ("dwAvailPageFile", c_ulong),
            ("dwTotalVirtual", c_ulong),
            ("dwAvailVirtual", c_ulong)
        ]
    memoryStatus = MEMORYSTATUS()
    memoryStatus.dwLength = ctypes.sizeof(MEMORYSTATUS)
    kernel32.GlobalMemoryStatus(ctypes.byref(memoryStatus))

    return (memoryStatus.dwAvailPhys, memoryStatus.dwTotalPhys)

avail, total = get_memory_status()
print avail + " " + total

如果我执行此操作,我总是得到相同的可用值和总RAM。当我要求dwMemoryLoad时,我获得了与窗口任务管理器中显示的相同的值作为物理内存'这是使用的RAM的百分比(不是0)。但我想要精确的字节数。难道我做错了什么?

我不能使用任何额外的图书馆,如果可以的话,我已经做过了。

1 个答案:

答案 0 :(得分:3)

根据GlobalMemoryStatus MSDN entry的说明:

  

在具有2 GB以上且内存小于4 GB的Intel x86计算机上,GlobalMemoryStatus函数将始终在MEMORYSTATUS结构的dwTotalPhys成员中返回2 GB。同样,如果总可用内存介于2到4 GB之间,则MEMORYSTATUS结构的dwAvailPhys成员将向下舍入为2 GB。如果使用/ LARGEADDRESSAWARE链接器选项链接可执行文件,则GlobalMemoryStatus函数将在两个成员中返回正确数量的物理内存。

而且,在文章的顶部,有:

  

[GlobalMemoryStatus可以返回不正确的信息。请改用GlobalMemoryStatusEx功能。]

顺便说一句,这个函数存在于pywin32库中。