| ... | @@ -47,12 +47,8 @@ pub const ArenaAllocator = struct { | ... | @@ -47,12 +47,8 @@ pub const ArenaAllocator = struct { |
| 47 | | 47 | |
| 48 | fn createNode(self: *ArenaAllocator, prev_len: usize, minimum_size: usize) !*BufNode { | 48 | fn createNode(self: *ArenaAllocator, prev_len: usize, minimum_size: usize) !*BufNode { |
| 49 | const actual_min_size = minimum_size + @sizeOf(BufNode); | 49 | const actual_min_size = minimum_size + @sizeOf(BufNode); |
| 50 | var len = prev_len; | 50 | const big_enough_len = prev_len + actual_min_size; |
| 51 | while (true) { | 51 | const len = big_enough_len + big_enough_len / 2; |
| 52 | len += len / 2; | | |
| 53 | len += mem.page_size - @rem(len, mem.page_size); | | |
| 54 | if (len >= actual_min_size) break; | | |
| 55 | } | | |
| 56 | const buf = try self.child_allocator.alignedAlloc(u8, @alignOf(BufNode), len); | 52 | const buf = try self.child_allocator.alignedAlloc(u8, @alignOf(BufNode), len); |
| 57 | const buf_node_slice = mem.bytesAsSlice(BufNode, buf[0..@sizeOf(BufNode)]); | 53 | const buf_node_slice = mem.bytesAsSlice(BufNode, buf[0..@sizeOf(BufNode)]); |
| 58 | const buf_node = &buf_node_slice[0]; | 54 | const buf_node = &buf_node_slice[0]; |