Function defaultQueryPageSize [src]

The default implementation of std.options.queryPageSize. Asserts that the page size is within page_size_min and page_size_max

Prototype

pub fn defaultQueryPageSize() usize

Example

test defaultQueryPageSize { if (builtin.cpu.arch.isWasm()) return error.SkipZigTest; assert(std.math.isPowerOfTwo(defaultQueryPageSize())); }

Source

pub fn defaultQueryPageSize() usize { const global = struct { var cached_result: std.atomic.Value(usize) = .init(0); }; var size = global.cached_result.load(.unordered); if (size > 0) return size; size = switch (builtin.os.tag) { .linux => if (builtin.link_libc) @intCast(std.c.sysconf(@intFromEnum(std.c._SC.PAGESIZE))) else std.os.linux.getauxval(std.elf.AT_PAGESZ), .driverkit, .ios, .macos, .tvos, .visionos, .watchos => blk: { const task_port = std.c.mach_task_self(); // mach_task_self may fail "if there are any resource failures or other errors". if (task_port == std.c.TASK_NULL) break :blk 0; var info_count = std.c.TASK_VM_INFO_COUNT; var vm_info: std.c.task_vm_info_data_t = undefined; vm_info.page_size = 0; _ = std.c.task_info( task_port, std.c.TASK_VM_INFO, @as(std.c.task_info_t, @ptrCast(&vm_info)), &info_count, ); assert(vm_info.page_size != 0); break :blk @intCast(vm_info.page_size); }, .windows => blk: { var info: std.os.windows.SYSTEM_INFO = undefined; std.os.windows.kernel32.GetSystemInfo(&info); break :blk info.dwPageSize; }, else => if (builtin.link_libc) @intCast(std.c.sysconf(@intFromEnum(std.c._SC.PAGESIZE))) else if (builtin.os.tag == .freestanding or builtin.os.tag == .other) @compileError("unsupported target: freestanding/other") else @compileError("pageSize on " ++ @tagName(builtin.cpu.arch) ++ "-" ++ @tagName(builtin.os.tag) ++ " is not supported without linking libc, using the default implementation"), }; assert(size >= page_size_min); assert(size <= page_size_max); global.cached_result.store(size, .unordered); return size; }