Cleaned up GC memory management a bit
This commit is contained in:
parent
e4dff3a441
commit
14ebe3e4cf
1 changed files with 16 additions and 8 deletions
|
|
@ -86,28 +86,36 @@ elif defined(nintendoswitch):
|
||||||
var
|
var
|
||||||
stack: pointer
|
stack: pointer
|
||||||
|
|
||||||
proc osAllocPages(size: int): pointer {.inline.} =
|
proc alignSize(size: int): int =
|
||||||
stack = memalign(0x1000, size)
|
(size + 0x00000FFF) and not 0x00000FFF
|
||||||
result = virtmemReserveMap(size.csize)
|
|
||||||
let rc = svcMapMemory(result, stack, size.uint64)
|
|
||||||
if rc.uint32 != 0:
|
|
||||||
#discard svcUnmapMemory(result, stack, size.csize)
|
|
||||||
raiseOutOfMem()
|
|
||||||
|
|
||||||
proc osTryAllocPages(size: int): pointer {.inline.} =
|
proc freeMem(p: pointer, msize: int) =
|
||||||
stack = memalign(0x1000, size)
|
let size = alignSize(msize)
|
||||||
result = virtmemReserveMap(size.csize)
|
|
||||||
let rc = svcMapMemory(result, stack, size.uint64)
|
|
||||||
if rc.uint32 != 0:
|
|
||||||
#discard svcUnmapMemory(result, stack, size.csize)
|
|
||||||
result = nil
|
|
||||||
|
|
||||||
proc osDeallocPages(p: pointer, size: int) {.inline.} =
|
|
||||||
when reallyOsDealloc:
|
|
||||||
discard svcUnmapMemory(p, stack, size.uint64)
|
discard svcUnmapMemory(p, stack, size.uint64)
|
||||||
virtmemFreeMap(p, size.csize)
|
virtmemFreeMap(p, size.csize)
|
||||||
free(stack)
|
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:
|
||||||
|
freeMem(result, size)
|
||||||
|
raiseOutOfMem()
|
||||||
|
|
||||||
|
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:
|
||||||
|
freeMem(result, size)
|
||||||
|
result = nil
|
||||||
|
|
||||||
|
proc osDeallocPages(p: pointer, size: int) {.inline.} =
|
||||||
|
when reallyOsDealloc:
|
||||||
|
freeMem(p, size)
|
||||||
|
|
||||||
elif defined(posix):
|
elif defined(posix):
|
||||||
const
|
const
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue