Holy cow, I wrote a book!
It's simple to explain what it does, but people often misunderstand.
The /3GB switch changes the way the 4GB virtual address space is split up.
Instead of splitting it as 2GB of user mode virtual address space
and 2GB of kernel mode virtual address space,
the split is 3GB of user mode virtual address space and 1GB of kernel mode
virtual address space.
And yet people think it does more than that.
I think the problem is that people think that "virtual address space"
means something other than just "virtual address space".
The term "address space" refers to how a numerical value (known
as an "address") is interpreted when it is used to access some
type of resource. There is a physical address space; each address
in the physical address space refers to a byte in a memory chip
somewhere. (Note for pedants: Yes, it's actually spread out over
several memory chips, but that's not important here.)
There is an I/O address space; each address in the I/O address space
allows the CPU to communicate with a hardware device.
And then there is the virtual address space. When people
say "address space", they usually mean "virtual address space".
The virtual address space is the set of possible pointer values
(addresses) that can be used at a single moment by the processor.
In other words, if you have
an address like 0x12345678, the virtual address space determines what
you get if you try to access that memory.
The contents of the virtual address space changes over time, for example,
as you allocate and free memory.
It also varies based on context: each process has its own virtual address
Saying that 2GB (or 3GB) of virtual address space is available to user mode
means that at any given moment in time, out of the 4 billion
virtual addresses available in a 32-bit value, 2 billion
(or 3 billion) of them are potentially usable by user-mode code.
Over the next few entries, I'll talk about the
various consequences and misinterpretations of the /3GB switch.