“Virtual memory, in a nutshell, refers to the method of an OS presenting non-contiguous memory as if it were contiguous.”
Of course in practice, on 32bit Windows, you still have the problem of actually getting a contiguous memory block greater than ~1.5Gb.
Windows maps drivers and suchlike at the bottom of the virtual memory for each process, then at around 2Gb, you’ll find it places system dll’s! So your poor process can never actually map a contiguous block of memory 1.5gb, even though it can access 1.5Gb + memory from the upper limit (~1Gb) using the /3Gb switch.
A real pain when you’re constrained to 32Bit Windows and attempting to create memory hungry processes used memory mapped files for shared mem.