lib/gpalloc/src/large/model.zig
daab053ee43316e1809a84551d573ddd1e5bf3d2
1 const std = @import("std");
2 const size_class = @import("../root.zig").class;
3
4 const Alignment = std.mem.Alignment;
5
6 pub const class_step: usize = 4 * 1024;
7 pub const max_small_cached_size: usize = 256 * 1024;
8 pub const huge_class_step: usize = 4 * 1024 * 1024;
9 pub const min_huge_cached_size: usize = 4 * 1024 * 1024;
10 pub const max_cached_size: usize = 32 * 1024 * 1024;
11 pub const medium_class_step: usize = 64 * 1024;
12 pub const min_medium_cached_size: usize = max_small_cached_size + medium_class_step;
13 pub const max_medium_cached_size: usize = 512 * 1024;
14 pub const medium_default_limit_bytes: usize = 16 * 1024 * 1024;
15 pub const alignment = Alignment.fromByteUnits(size_class.min_alignment);
16
17 pub const min_cached_size = size_class.max_small_size + class_step;
18 pub const small_class_count = (max_small_cached_size - min_cached_size) / class_step + 1;
19 pub const huge_class_count = (max_cached_size - min_huge_cached_size) / huge_class_step + 1;
20 pub const class_count = small_class_count + huge_class_count;
21 pub const medium_class_count =
22 (max_medium_cached_size - min_medium_cached_size) / medium_class_step + 1;
23 pub const bin_capacity: u16 = 64;
24 pub const header_magic: u64 = 0x5441_4c47_4341_0001;
25 pub const medium_header_magic: u64 = 0x5441_4d47_4341_0001;
26
27 pub const Class = struct {
28 index: usize,
29 size: usize,
30 };
31
32 pub const Entry = struct {
33 class: Class,
34 ptr: [*]u8,
35 };
36
37 pub const Header = extern struct {
38 magic: u64,
39 class_index: usize,
40 };
41
42 pub const header_size = std.mem.alignForward(
43 usize,
44 @sizeOf(Header),
45 size_class.min_alignment,
46 );