diff --git a/psutil/_psutil_windows.c b/psutil/_psutil_windows.c index 0b5781ac17..97e2d130e3 100644 --- a/psutil/_psutil_windows.c +++ b/psutil/_psutil_windows.c @@ -610,43 +610,23 @@ psutil_proc_memory_uss(PyObject *self, PyObject *args) { */ static PyObject * psutil_virtual_mem(PyObject *self, PyObject *args) { - size_t totalPhys, availPhys, totalPageFile, usedPageFile, pageSize; + unsigned long long totalPhys, availPhys, totalSys, availSys, pageSize; PERFORMANCE_INFORMATION perfInfo; - MEMORYSTATUSEX memInfo; - memInfo.dwLength = sizeof(MEMORYSTATUSEX); - - if (! GlobalMemoryStatusEx(&memInfo)) { - PyErr_SetFromWindowsErr(0); - return NULL; - } if (! GetPerformanceInfo(&perfInfo, sizeof(PERFORMANCE_INFORMATION))) { PyErr_SetFromWindowsErr(0); return NULL; } + // values are size_t, widen to long long pageSize = perfInfo.PageSize; totalPhys = perfInfo.PhysicalTotal * pageSize; availPhys = perfInfo.PhysicalAvailable * pageSize; - totalPageFile = perfInfo.CommitLimit * pageSize; - usedPageFile = perfInfo.CommitTotal * pageSize; - // PERFORMANCE_INFORMATION values are defined as SIZE_T which on 64bits - // is an (unsigned long long) and on 32bits is an (unsigned int). -#if defined(_WIN64) - return Py_BuildValue("(LLLLLL)", - (unsigned long long) totalPhys, - (unsigned long long) availPhys, - (unsigned long long) totalPageFile, - (unsigned long long) (totalPageFile - usedPageFile), - memInfo.ullTotalVirtual, - memInfo.ullAvailVirtual); -#else - return Py_BuildValue("(IIIILL)", - (unsigned int) totalPhys, - (unsigned int) availPhys, - (unsigned int) totalPageFile, - (unsigned int) (totalPageFile - usedPageFile), - memInfo.ullTotalVirtual, - memInfo.ullAvailVirtual); -#endif + totalSys = perfInfo.CommitLimit * pageSize; + availSys = totalSys - perfInfo.CommitTotal * pageSize; + return Py_BuildValue("(LLLL)", + totalPhys, + availPhys, + totalSys, + availSys); } diff --git a/psutil/_pswindows.py b/psutil/_pswindows.py index 7d882b7747..352e1b8567 100644 --- a/psutil/_pswindows.py +++ b/psutil/_pswindows.py @@ -229,7 +229,7 @@ def getpagesize(): def virtual_memory(): """System virtual memory as a namedtuple.""" mem = cext.virtual_mem() - totphys, availphys, totpagef, availpagef, totvirt, freevirt = mem + totphys, availphys, totsys, availsys = mem # total = totphys avail = availphys @@ -248,8 +248,7 @@ def swap_memory(): total_system = mem[2] free_system = mem[3] - # Despite the name PageFile refers to total system memory here - # thus physical memory values need to be subtracted to get swap values + # physical memory values need to be substracted to get swap values total = total_system - total_phys free = min(total, free_system - free_phys) used = total - free