package runtime
import (
"unsafe"
)
func sysAlloc (n uintptr , sysStat *sysMemStat ) unsafe .Pointer {
v , err := mmap (nil , n , _PROT_READ |_PROT_WRITE , _MAP_ANON |_MAP_PRIVATE , -1 , 0 )
if err != 0 {
return nil
}
sysStat .add (int64 (n ))
return v
}
func sysUnused (v unsafe .Pointer , n uintptr ) {
madvise (v , n , _MADV_FREE_REUSABLE )
}
func sysUsed (v unsafe .Pointer , n uintptr ) {
madvise (v , n , _MADV_FREE_REUSE )
}
func sysHugePage (v unsafe .Pointer , n uintptr ) {
}
func sysFree (v unsafe .Pointer , n uintptr , sysStat *sysMemStat ) {
sysStat .add (-int64 (n ))
munmap (v , n )
}
func sysFault (v unsafe .Pointer , n uintptr ) {
mmap (v , n , _PROT_NONE , _MAP_ANON |_MAP_PRIVATE |_MAP_FIXED , -1 , 0 )
}
func sysReserve (v unsafe .Pointer , n uintptr ) unsafe .Pointer {
p , err := mmap (v , n , _PROT_NONE , _MAP_ANON |_MAP_PRIVATE , -1 , 0 )
if err != 0 {
return nil
}
return p
}
const _ENOMEM = 12
func sysMap (v unsafe .Pointer , n uintptr , sysStat *sysMemStat ) {
sysStat .add (int64 (n ))
p , err := mmap (v , n , _PROT_READ |_PROT_WRITE , _MAP_ANON |_MAP_FIXED |_MAP_PRIVATE , -1 , 0 )
if err == _ENOMEM {
throw ("runtime: out of memory" )
}
if p != v || err != 0 {
throw ("runtime: cannot map pages in arena address space" )
}
}
The pages are generated with Golds v0.3.6 . (GOOS=darwin GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu .
PR and bug reports are welcome and can be submitted to the issue list .
Please follow @Go100and1 (reachable from the left QR code) to get the latest news of Golds .