piframe-go/vendor/github.com/mackerelio/go-osstat/memory/memory_windows.go

54 lines
1.3 KiB
Go

// +build windows
package memory
import (
"fmt"
"syscall"
"unsafe"
)
var (
kernel32 = syscall.NewLazyDLL("kernel32.dll")
globalMemoryStatusEx = kernel32.NewProc("GlobalMemoryStatusEx")
)
// Get memory statistics
func Get() (*Stats, error) {
var memoryStatus memoryStatusEx
memoryStatus.Length = uint32(unsafe.Sizeof(memoryStatus))
ret, _, err := globalMemoryStatusEx.Call(uintptr(unsafe.Pointer(&memoryStatus)))
if ret == 0 {
return nil, fmt.Errorf("failed in GlobalMemoryStatusEx: %s", err)
}
var memory Stats
memory.Free = memoryStatus.AvailPhys
memory.Total = memoryStatus.TotalPhys
memory.Used = memory.Total - memory.Free
memory.PageFileTotal = memoryStatus.TotalPageFile
memory.PageFileFree = memoryStatus.AvailPageFile
memory.VirtualTotal = memoryStatus.TotalVirtual
memory.VirtualFree = memoryStatus.AvailVirtual
return &memory, nil
}
type memoryStatusEx struct {
Length uint32
MemoryLoad uint32
TotalPhys uint64
AvailPhys uint64
TotalPageFile uint64
AvailPageFile uint64
TotalVirtual uint64
AvailVirtual uint64
AvailExtendedVirtual uint64
}
// Stats represents memory statistics for Windows
type Stats struct {
Total, Used, Free, PageFileTotal, PageFileFree, VirtualTotal, VirtualFree uint64
}