Originally, the top 2GB of the 32-bit address-space was reserved for the kernel, and the bottom 2GB available for each running program. This worked fairly well until programs started legitimately using 2GB of RAM, so Microsoft came up with a new scheme where only the top 1GB of address-space was reserved for the kernel, and the bottom 3GB was available for running programs.<p>Unfortunately, they couldn&#x27;t turn it on universally; there were a lot of programs that &quot;knew&quot; that malloc() would never return a pointer with the top bit set, so they used it as a flag for their own purposes. Such programs would break horribly in 3GB mode when pointers <i>could</i> have the top bit set. Also, restricting kernel-space meant the kernel had less room to do stuff; if you were running an app that was heavy on kernel-resources but light on RAM usage, 3GB mode would be a downgrade[1].<p>So applications have to opt-in to 3GB mode by setting a special flag in the executable, and 32-bit versions of Windows had to be put into 3GB mode at startup to support it at all.<p>Of course, the real solution to &quot;3GB mode at startup&quot; is just to run a 64-bit OS, and the real solution to &quot;2GB is not enough address-space&quot; is to run 64-bit applications.<p>[1]: <a href="https:&#x2F;&#x2F;blogs.technet.microsoft.com&#x2F;askperf&#x2F;2007&#x2F;03&#x2F;23&#x2F;memory-management-demystifying-3gb&#x2F;" rel="nofollow">https:&#x2F;&#x2F;blogs.technet.microsoft.com&#x2F;askperf&#x2F;2007&#x2F;03&#x2F;23&#x2F;memor...</a>