From 3c13aa178b007cae19800579b40e82bef127f388 Mon Sep 17 00:00:00 2001 From: Shawn Landden Date: Tue, 9 Apr 2019 10:48:09 -0500 Subject: [PATCH] std.heap: do not excessively call mmap, and munmap in direct allocator --- std/heap.zig | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/std/heap.zig b/std/heap.zig index 239a65961a..bb2cd4f4d8 100644 --- a/std/heap.zig +++ b/std/heap.zig @@ -59,6 +59,8 @@ pub const DirectAllocator = struct { fn alloc(allocator: *Allocator, n: usize, alignment: u29) error{OutOfMemory}![]u8 { const self = @fieldParentPtr(DirectAllocator, "allocator", allocator); + if (n == 0) + return (([*]u8)(undefined))[0..0]; switch (builtin.os) { Os.linux, Os.macosx, Os.ios, Os.freebsd, Os.netbsd => { @@ -140,7 +142,9 @@ pub const DirectAllocator = struct { } const result = try alloc(allocator, new_size, new_align); @memcpy(result.ptr, old_mem.ptr, std.math.min(old_mem.len, result.len)); - _ = os.posix.munmap(@ptrToInt(old_mem.ptr), old_mem.len); + if (old_mem.len > 0) { + _ = os.posix.munmap(@ptrToInt(old_mem.ptr), old_mem.len); + } return result; }, Os.windows => {