1234567891011121314151617181920 |
- package mem_virtual
- import "core:sys/posix"
- _reserve :: proc "contextless" (size: uint) -> (data: []byte, err: Allocator_Error) {
- result := posix.mmap(nil, size, {}, {.ANONYMOUS, .PRIVATE})
- if result == posix.MAP_FAILED {
- assert_contextless(posix.errno() == .ENOMEM)
- return nil, .Out_Of_Memory
- }
- return ([^]byte)(uintptr(result))[:size], nil
- }
- _decommit :: proc "contextless" (data: rawptr, size: uint) {
- MADV_FREE :: 6
- posix.mprotect(data, size, {})
- posix.posix_madvise(data, size, transmute(posix.MAdvice)i32(MADV_FREE))
- }
|