local ffi = require 'ffi'
ffi.cdef[[
typedef unsigned long DWORD;
typedef int BOOL;
typedef unsigned __int64 DWORDLONG;
typedef struct _MEMORYSTATUSEX {
DWORD dwLength;
DWORD dwMemoryLoad;
DWORDLONG ullTotalPhys;
DWORDLONG ullAvailPhys;
DWORDLONG ullTotalPageFile;
DWORDLONG ullAvailPageFile;
DWORDLONG ullTotalVirtual;
DWORDLONG ullAvailVirtual;
DWORDLONG ullAvailExtendedVirtual;
} MEMORYSTATUSEX, *LPMEMORYSTATUSEX;
BOOL GlobalMemoryStatusEx(LPMEMORYSTATUSEX lpBuffer);
]]
local mi = ffi.new('MEMORYSTATUSEX[1]')
mi[0].dwLength = ffi.sizeof('MEMORYSTATUSEX')
ffi.C.GlobalMemoryStatusEx(mi)
local res = tonumber(mi[0].ullTotalPhys)