I have 64 GB of RAM, specifically this model (I think): https://www.gskill.com/specification/165/396/1731653269/F5-6000J2836G32GX2-FX5-Specification fortunately purchased just before RAM prices went insane.
Last night, I ran memtest86+ and noticed it showed I have “61.6GB” of RAM. This is 2.4 GB less than the stated 64 GB. I know that storage sizes are specified in GB (1000³B) instead of GiB (1024³B), so it wouldn’t have shocked me if RAM is the same, but this actually doesn’t explain it: 64 GB makes 59.6 GiB, so if that was it then I got 2 GiB extra, which makes no sense.
To be clear, I’m not complaining and there’s no issue to fix, I just want to understand where the numbers are coming from.
My friend has 96 gigs of RAM, and for him Windows reports 93.6 GB, which is also 2.4 GB less than stated, same as me! So it seems more likely right now that RAM is actually measured and marketed in GiBs, and the same effect is causing both of us to “lose” 2.4 GB. But what effect is it?
It gets weirder.
In the FAQ of memtest, there’s this:
Why is Memtest86+ testing more memory than I have?
It doesn’t. The memory on a modern computer is not necessarily mapped in a linear way. E.g.: 16GB of RAM can be virtually mapped from 0-15GB and 16-17GB with a hole between 15GB and 16GB.
Which I thought might be related, so to get to the bottom of it I tracked which regions of memory it tests. This is what it showed:
- 4MB - 1GB (1020MB)
- 1GB - 2GB (1GB)
- 2GB - 2.4GB (416 MB)
- 4GB - 5GB (1GB)
- 5GB - 6GB (1GB)
- … more 1GB regions with no gaps …
- 62GB - 63GB (1GB)
- 63GB - 63.4GB (478MB)
Summing them all up gives a total of 60GiB + 1914MiB = 61GiB + 890MiB = 61.87GiB if my math is right, so it doesn’t even match the 61.6 figure it reports!
… What’s going on? WHERE ARE THE NUMBERS COMING FROM?!
If there’s a better community for this, let me know and I’ll cross-post it there.
electrical engineer here
if you’re familiar with memory allocations like in C or C++, you would know that before allocating memory on the heap, there is some memory used by the OS that is strictly inaccessible to the languages. taking that operation and abstracting it to the hardware level, before giving the rest of the unallocated memory to the OS, specific system processes and hardware reservations use some of that memory. When a resource monitor (like btop or htop) reports memory, it only reports memory within scope of the memory allocation inside the OS. that’s why you see 61.3 GB instead of 64 GB, ~2.7GB is being used to run the hardware.
OK, slow down there, you might go into the BIOS and check to see if you have a hardware reserve for internal graphics. Sometimes it’ll default to something small like 64MB, by you can configure it up to 2048MB on some Intel motherboards iirc, maybe AMD is higher because it’s an “APU” which will reserve some in the same way.
This was my thought too. 64GB is 64GB (powers of 2) when it comes to RAM unlike storage media. So if it shows as less, something is allocating it at or before boot.
GiB is powers of two, GB is powers of ten.
It’s extra confusing because it was retroactively made this way, and most people mean gibibyte when colloquially using gigabyte. You’d expect we’d make the “weird” one the one that is used less, but G/giga is indeed a SI prefix that means 10^9. It will never stop causing confusion and miscommunication
GiB is powers of two, GB can be either depending on context, IMO.
– Frost
RAM and cpus use the proper 1024 B to kB to MB to GB. Unlike hdd makers that paid ISO to retroactively make it 1000. Or worse internet providers that use bits (b) instead of bytes (B) (reasoning that signal transmission uses bits).
It’s definitely the kernel and bios reserving pieces. They need it to run the computer, after all. Afaik even other hardware can reserve memory for itself, like gpus or network devices.
When the computer boots, it puts part of the bios in RAM and locks this area. Some hardware drivers do the same.
I do Computer Science, so I know these things!
Essentially, nearly all computers are based on binary (base 2), which is why you see a lot of powers of two when talking about processors, memory, and that sort. However, our standard SI units use base 10. 1000 grams is a kilogram, 1000 metres is a kilometre, etc. So when creating a standard unit for memory, kilobytes, megabytes, etc. base 10 was used. KB, MB, GB, TB, etc. are all SI units. However, the IEC standard was later created that utilised base 2 instead. So KiB, MiB, GiB, TiB, etc. are all IEC units where 1024 bytes is equal to one kibibyte, “bi” for binary!
But as you said, this is probably not the issue. RAM usually uses IEC units, while storage advertises SI units. Some of your memory might be reserved for system level stuff and/or the iGPU. My laptop (running EndeavourOS, so the units properly show up as IEC units unlike on Windows), for instance, shows up as 15.2 GiB of total memory, presumably because some of it is reserved for the iGPU and other bits.
I would have assumed that much like memory on heap there’s some memory that’s inaccessible by the OS (and hence resource monitor) so when it fetches the size of the memory, it only fetches the amount pre-allocated to the OS.
reserved for […] the iGPU
Some BIOSes have a setting for how much shared graphics memory is allocated, with such helpful values as Auto, Gaming and Performance.
It is possible for me to max out this 15.2 GiB of free memory when I had a weird widget that had memory issues, but the reserved bits are inaccessible, as after the 15.2 GiB runs out, CRASH!
Maybe it’s not counting memory that can’t be tested because it’s needed for the kernel and device drivers. For example according to its man page
freereports total memory “minus a few reserved bits and kernel binary code” and on my desktop here that’s about 15.2 out of 16GB.I don’t know though, most of a gigabyte does seem like a suspiciously large amount of memory for that, never mind 2.4 gigs. I guess it’s i/o buffers, page tables, and things like that.
There is no kernel and no device drivers, MemTest86+ runs on bare metal and it moves itself around to test all memory, so it uses virtually no memory and should show all available memory.
Unlike hard drives and SSDs which as you have observed are incessantly manufactured in powers-of-ten mega/giga/terabytes but marketed as if they were powers-of-two mebi/gibi/tebibytes, a RAM chip’s capacity is absolutely, definitely, 100% down to the individual bit precisely the capacity at which it is rated in powers-of-two megabytes. Due to the way that memory is accessed there is no other way and it cannot be fudged. (The exception is ECC RAM which typically has an extra bit per byte to hold the parity data, but this is not accessible to the user so that’s moot.)
There is a small bite of your memory space taken out for Memtestx86 to reside in, which is necessary in order for it to run. Your BIOS probably has some portion of memory reserved as well, either for peripheral memory mapping or for use as video memory, or similar.
There is probably also some rounding going on in the total capacity that Memtestx86 reports.
Sorry, it’s me taking up that space.
Name checks out.
Memory makers practice bistromathics
Zaphod showed up in another comment thread. What is going on?
What’s going on is that Lemmy’s demographics are mostly made of huge nerds who thrive on references.
That sounds mostly harmless.
I don’t know the answer but I think “The memory on a modern computer is not necessarily mapped in a linear way” is glossing over a lot of complexity.
Screenshots of MemTest86+ (on their own site and elsewhere) all seem to include an oddball number for the “memory” figure. Your situation is normal.









