motiejus/zig

fork of https://codeberg.org/ziglang/zig
git clone https://git.jakstys.lt/motiejus/zig.git
Log | Tree | Refs | README | LICENSE

commit 3c13aa178b007cae19800579b40e82bef127f388 (tree)
parent 8afa1e800b9957bff707ca8f57e3c38fc38e2597
Author: Shawn Landden <shawn@git.icu>
Date:   Tue,  9 Apr 2019 10:48:09 -0500

std.heap: do not excessively call mmap, and munmap in direct allocator

Diffstat:
Mstd/heap.zig | 6+++++-
1 file changed, 5 insertions(+), 1 deletion(-)

diff --git 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 => {