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.