Function totalSystemMemory [src]

Returns the total system memory, in bytes as a u64. We return a u64 instead of usize due to PAE on ARM and Linux's /proc/meminfo reporting more memory when using QEMU user mode emulation.

Prototype

pub fn totalSystemMemory() TotalSystemMemoryError!u64

Possible Errors

UnknownTotalSystemMemory

Source

pub fn totalSystemMemory() TotalSystemMemoryError!u64 { switch (native_os) { .linux => { var info: std.os.linux.Sysinfo = undefined; const result: usize = std.os.linux.sysinfo(&info); if (std.os.linux.E.init(result) != .SUCCESS) { return error.UnknownTotalSystemMemory; } // Promote to u64 to avoid overflow on systems where info.totalram is a 32-bit usize return @as(u64, info.totalram) * info.mem_unit; }, .freebsd => { var physmem: c_ulong = undefined; var len: usize = @sizeOf(c_ulong); posix.sysctlbynameZ("hw.physmem", &physmem, &len, null, 0) catch |err| switch (err) { error.UnknownName => unreachable, else => return error.UnknownTotalSystemMemory, }; return @as(u64, @intCast(physmem)); }, // whole Darwin family .driverkit, .ios, .macos, .tvos, .visionos, .watchos => { // "hw.memsize" returns uint64_t var physmem: u64 = undefined; var len: usize = @sizeOf(u64); posix.sysctlbynameZ("hw.memsize", &physmem, &len, null, 0) catch |err| switch (err) { error.PermissionDenied => unreachable, // only when setting values, error.SystemResources => unreachable, // memory already on the stack error.UnknownName => unreachable, // constant, known good value else => return error.UnknownTotalSystemMemory, }; return physmem; }, .openbsd => { const mib: [2]c_int = [_]c_int{ posix.CTL.HW, posix.HW.PHYSMEM64, }; var physmem: i64 = undefined; var len: usize = @sizeOf(@TypeOf(physmem)); posix.sysctl(&mib, &physmem, &len, null, 0) catch |err| switch (err) { error.NameTooLong => unreachable, // constant, known good value error.PermissionDenied => unreachable, // only when setting values, error.SystemResources => unreachable, // memory already on the stack error.UnknownName => unreachable, // constant, known good value else => return error.UnknownTotalSystemMemory, }; assert(physmem >= 0); return @as(u64, @bitCast(physmem)); }, .windows => { var sbi: windows.SYSTEM_BASIC_INFORMATION = undefined; const rc = windows.ntdll.NtQuerySystemInformation( .SystemBasicInformation, &sbi, @sizeOf(windows.SYSTEM_BASIC_INFORMATION), null, ); if (rc != .SUCCESS) { return error.UnknownTotalSystemMemory; } return @as(u64, sbi.NumberOfPhysicalPages) * sbi.PageSize; }, else => return error.UnknownTotalSystemMemory, } }