diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2025-01-30 18:25:01 -0800 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2025-02-06 14:23:23 -0800 |
| commit | dd2fa4f75d3d2b1214fde22081f0b88850d1b55d (patch) | |
| tree | 272d7d23a6f4bd7627adbbdc6145b3cb8010c89d | |
| parent | b23662feeb0ecea67eefbcfe941e609c5a8ca842 (diff) | |
| download | zig-dd2fa4f75d3d2b1214fde22081f0b88850d1b55d.tar.gz zig-dd2fa4f75d3d2b1214fde22081f0b88850d1b55d.zip | |
std.heap.GeneralPurposeAllocator: runtime-known page size
no longer causes compilation failure.
This also addresses the problem of high map count causing OOM by
choosing a page size of 2MiB for most targets when the page_size_max is
smaller than this number.
| -rw-r--r-- | lib/std/heap/general_purpose_allocator.zig | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/lib/std/heap/general_purpose_allocator.zig b/lib/std/heap/general_purpose_allocator.zig index bf3f9df76d..d572536860 100644 --- a/lib/std/heap/general_purpose_allocator.zig +++ b/lib/std/heap/general_purpose_allocator.zig @@ -99,7 +99,11 @@ const math = std.math; const assert = std.debug.assert; const mem = std.mem; const Allocator = std.mem.Allocator; -const page_size = std.heap.pageSize(); // TODO: allow this to be runtime known +const page_size: usize = @max(std.heap.page_size_max, switch (builtin.os.tag) { + .windows => 64 * 1024, // Makes `std.heap.PageAllocator` take the happy path. + .wasi => 64 * 1024, // Max alignment supported by `std.heap.WasmAllocator`. + else => 2 * 1024 * 1024, // Avoids too many active mappings when `page_size_max` is low. +}); const StackTrace = std.builtin.StackTrace; /// Integer type for pointing to slots in a small allocation |
