diff options
Diffstat (limited to 'src/runtime')
| -rw-r--r-- | src/runtime/mem_js.go | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/src/runtime/mem_js.go b/src/runtime/mem_js.go index 699a80db26..092b3d4fa2 100644 --- a/src/runtime/mem_js.go +++ b/src/runtime/mem_js.go @@ -7,7 +7,6 @@ package runtime import ( - "runtime/internal/sys" "unsafe" ) @@ -52,14 +51,18 @@ func sysReserve(v unsafe.Pointer, n uintptr) unsafe.Pointer { return nil } - if reserveEnd < lastmoduledatap.end { - reserveEnd = lastmoduledatap.end + // Round up the initial reserveEnd to 64 KiB so that + // reservations are always aligned to the page size. + initReserveEnd := alignUp(lastmoduledatap.end, physPageSize) + if reserveEnd < initReserveEnd { + reserveEnd = initReserveEnd } v = unsafe.Pointer(reserveEnd) - reserveEnd += n + reserveEnd += alignUp(n, physPageSize) current := currentMemory() - needed := int32(reserveEnd/sys.DefaultPhysPageSize + 1) + // reserveEnd is always at a page boundary. + needed := int32(reserveEnd / physPageSize) if current < needed { if growMemory(needed-current) == -1 { return nil |
