56 lines
1.3 KiB
Go
56 lines
1.3 KiB
Go
|
package vmem
|
||
|
|
||
|
const (
|
||
|
memDecommit = 0x4000
|
||
|
memRelease = 0x8000
|
||
|
)
|
||
|
|
||
|
type systemInfo struct {
|
||
|
wProcessorArchitecture uint16
|
||
|
wReserved uint16
|
||
|
dwPageSize uint32
|
||
|
lpMinimumApplicationAddress uintptr
|
||
|
lpMaximumApplicationAddress uintptr
|
||
|
dwActiveProcessorMask uintptr
|
||
|
dwNumberOfProcessors uint32
|
||
|
dwProcessorType uint32
|
||
|
dwAllocationGranularity uint32
|
||
|
wProcessorLevel uint16
|
||
|
wProcessorRevision uint16
|
||
|
}
|
||
|
|
||
|
// Enumeration of allocation type values.
|
||
|
const (
|
||
|
MemCommit = 0x00001000
|
||
|
MemReserve = 0x00002000
|
||
|
MemReset = 0x00080000
|
||
|
MemResetUndo = 0x10000000
|
||
|
)
|
||
|
|
||
|
// Enumeration of protection levels.
|
||
|
const (
|
||
|
PageNoAccess = 0x01
|
||
|
PageReadOnly = 0x02
|
||
|
PageReadWrite = 0x04
|
||
|
PageWriteCopy = 0x08
|
||
|
PageExecute = 0x10
|
||
|
PageExecuteRead = 0x20
|
||
|
PageExecuteReadWrite = 0x40
|
||
|
PageExecuteWriteCopy = 0x80
|
||
|
)
|
||
|
|
||
|
// RoundDown rounds an address up to a given multiple of size. Size must be a
|
||
|
// power of two.
|
||
|
func RoundDown(addr uint64, size uint64) uint64 {
|
||
|
if size&(size-1) != 0 {
|
||
|
panic("alignment size is not a power of two")
|
||
|
}
|
||
|
return addr &^ (size - 1)
|
||
|
}
|
||
|
|
||
|
// RoundUp rounds an address up to a given multiple of size. Size must be a
|
||
|
// power of two.
|
||
|
func RoundUp(addr uint64, size uint64) uint64 {
|
||
|
return RoundDown(addr+size-1, size)
|
||
|
}
|