This is normal for 32-bit Windows.
If you don't have the / 3gb switch activated, you have a 2GB shared address space. However, minus the displayed executable file and at least half a dozen DLL and NLS files (for "hello world" - the real application is likely to be more like a dozen or two dozen of them).
Since they are not optimally located, you lose about half a gigabyte of addres space. The heap will not βenterβ into this area, and therefore allocating more than 1.5 GB will fail.
Here is the address space of a "typical program":

Please note how very skillfully one DLL is located in approximately 1/3 of the address space, effectively "cutting off" a third of the used memory.
Damon source share