virtual_openbsd.odin 541 B

1234567891011121314151617181920
  1. package mem_virtual
  2. import "core:sys/posix"
  3. _reserve :: proc "contextless" (size: uint) -> (data: []byte, err: Allocator_Error) {
  4. result := posix.mmap(nil, size, {}, {.ANONYMOUS, .PRIVATE})
  5. if result == posix.MAP_FAILED {
  6. assert_contextless(posix.errno() == .ENOMEM)
  7. return nil, .Out_Of_Memory
  8. }
  9. return ([^]byte)(uintptr(result))[:size], nil
  10. }
  11. _decommit :: proc "contextless" (data: rawptr, size: uint) {
  12. MADV_FREE :: 6
  13. posix.mprotect(data, size, {})
  14. posix.posix_madvise(data, size, transmute(posix.MAdvice)i32(MADV_FREE))
  15. }