123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- package system
- import (
- "unsafe"
- "golang.org/x/sys/windows"
- )
- var (
- modkernel32 = windows.NewLazySystemDLL("kernel32.dll")
- procGlobalMemoryStatusEx = modkernel32.NewProc("GlobalMemoryStatusEx")
- )
- // https://msdn.microsoft.com/en-us/library/windows/desktop/aa366589(v=vs.85).aspx
- // https://msdn.microsoft.com/en-us/library/windows/desktop/aa366770(v=vs.85).aspx
- type memorystatusex struct {
- dwLength uint32
- dwMemoryLoad uint32
- ullTotalPhys uint64
- ullAvailPhys uint64
- ullTotalPageFile uint64
- ullAvailPageFile uint64
- ullTotalVirtual uint64
- ullAvailVirtual uint64
- ullAvailExtendedVirtual uint64
- }
- // ReadMemInfo retrieves memory statistics of the host system and returns a
- // MemInfo type.
- func ReadMemInfo() (*MemInfo, error) {
- msi := &memorystatusex{
- dwLength: 64,
- }
- r1, _, _ := procGlobalMemoryStatusEx.Call(uintptr(unsafe.Pointer(msi)))
- if r1 == 0 {
- return &MemInfo{}, nil
- }
- return &MemInfo{
- MemTotal: int64(msi.ullTotalPhys),
- MemFree: int64(msi.ullAvailPhys),
- SwapTotal: int64(msi.ullTotalPageFile),
- SwapFree: int64(msi.ullAvailPageFile),
- }, nil
- }
|