Holy cow, I wrote a book!
computers have so much memory that running out of RAM
is rarely the cause for an "out of memory" error.
Actually, let's try that again.
For over a decade,
hard drive have been so large
that running out of swap
space is rarely the cause for an "out of memory" error.
In user-mode, the term memory
refers to virtual memory,
not physical RAM chips.
The amount of physical RAM doesn't affect how much memory
a user-mode application can allocate;
it's all about commit and swap space.¹
But swap space is disk space, and that is in the hundreds of
gigabytes for hard drives.
(Significantly less for SSDs, but even in that case, it's
far more than
The limiting factor these days is address space.
Each thread's stack takes a megabyte,
and if you're creating a lot of threads,
that can add up to a lot of address space consumed just for stacks.
And then you have to include the address space for the DLLs you've
loaded (which quickly adds up).
And then there's the address space for all the memory you allocated.
(Even if you don't end up using it, it still occupies address space
until you free it.)
Typically, when you get an
the problem isn't physical memory or virtual memory.
It's address space.
This is one of the main benefits of moving to 64-bit computing.
It's not that you actually are going to use or need all that memory.
But it relieves pressure on the address space:
The user-mode address space in 64-bit Windows is eight terabytes.
When the day comes that eight terabytes is not enough,
we at least won't have to redesign the application model
to expand the address space.
The current x86-64 hardware has support for address spaces of
up to 256TB, and
the theoretical address space for a 64-bit processor is
¹ Of course, physical RAM is a factor if
the application is explicitly allocating physical
memory, but that's the exception rather than the rule.
Help this customer clear up their confusion:
They reported that processes were failing to start with
and our diagnosis was that the
"The system has 8GB of RAM installed,
and Task Manager reports
that only 2GB of it is being used,
so it is unlikely that I am running out of any kind