Cleaned up GC memory management a bit

This commit is contained in:
Joey Yakimowich-Payne 2018-06-19 19:07:57 +09:00
commit 14ebe3e4cf

View file

@ -86,28 +86,36 @@ elif defined(nintendoswitch):
var
stack: pointer
proc osAllocPages(size: int): pointer {.inline.} =
proc alignSize(size: int): int =
(size + 0x00000FFF) and not 0x00000FFF
proc freeMem(p: pointer, msize: int) =
let size = alignSize(msize)
discard svcUnmapMemory(p, stack, size.uint64)
virtmemFreeMap(p, size.csize)
free(stack)
proc osAllocPages(msize: int): pointer {.inline.} =
let size = alignSize(msize)
stack = memalign(0x1000, size)
result = virtmemReserveMap(size.csize)
let rc = svcMapMemory(result, stack, size.uint64)
if rc.uint32 != 0:
#discard svcUnmapMemory(result, stack, size.csize)
freeMem(result, size)
raiseOutOfMem()
proc osTryAllocPages(size: int): pointer {.inline.} =
proc osTryAllocPages(msize: int): pointer {.inline.} =
let size = alignSize(msize)
stack = memalign(0x1000, size)
result = virtmemReserveMap(size.csize)
let rc = svcMapMemory(result, stack, size.uint64)
if rc.uint32 != 0:
#discard svcUnmapMemory(result, stack, size.csize)
freeMem(result, size)
result = nil
proc osDeallocPages(p: pointer, size: int) {.inline.} =
when reallyOsDealloc:
discard svcUnmapMemory(p, stack, size.uint64)
virtmemFreeMap(p, size.csize)
free(stack)
freeMem(p, size)
elif defined(posix):
const