diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2020-05-20 15:57:02 -0400 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2020-05-20 16:11:55 -0400 |
| commit | b1bcdc96ca4451be95caa00fe71aafb578611e34 (patch) | |
| tree | 3985ce579f307f1bc1e1ac2ab91eeb6a0c8c6230 | |
| parent | 8c10178a1e209af53d28cc70343d0ce908bccc1b (diff) | |
| download | zig-b1bcdc96ca4451be95caa00fe71aafb578611e34.tar.gz zig-b1bcdc96ca4451be95caa00fe71aafb578611e34.zip | |
arena allocator: smaller minimum allocation size
| -rw-r--r-- | lib/std/heap/arena_allocator.zig | 8 |
1 files changed, 2 insertions, 6 deletions
diff --git a/lib/std/heap/arena_allocator.zig b/lib/std/heap/arena_allocator.zig index daed17d6b3..337edf6dc0 100644 --- a/lib/std/heap/arena_allocator.zig +++ b/lib/std/heap/arena_allocator.zig @@ -47,12 +47,8 @@ pub const ArenaAllocator = struct { fn createNode(self: *ArenaAllocator, prev_len: usize, minimum_size: usize) !*BufNode { const actual_min_size = minimum_size + @sizeOf(BufNode); - var len = prev_len; - while (true) { - len += len / 2; - len += mem.page_size - @rem(len, mem.page_size); - if (len >= actual_min_size) break; - } + const big_enough_len = prev_len + actual_min_size; + const len = big_enough_len + big_enough_len / 2; const buf = try self.child_allocator.alignedAlloc(u8, @alignOf(BufNode), len); const buf_node_slice = mem.bytesAsSlice(BufNode, buf[0..@sizeOf(BufNode)]); const buf_node = &buf_node_slice[0]; |
