


Also of note, 64-bit processes that do not set the IMAGE_FILE_LARGE_ADDRESS_AWARE flag also only have access to 2 GB of user virtual address space. In either case, the kernel's virtual address space is the same as 64-bit processes, since it is shared across all processes. exe file is marked with the IMAGE_FILE_LARGE_ADDRESS_AWARE flag, then the process will get 4 GB of user-addressable virtual address space. If the OS is 64-bit, a 32-bit process by default gets 2 GB of user-address virtual address space. It isn't very helpful for a machine that is running just SQL Server, for instance, as that it only going to be one process so will hit the 3Gb limit (some editions can be configured to be AWE aware but not all, and the feature is slated to be removed in the next major release).Īs well as the 32-bit processes being able to use more than 3Gb in total the OS will be able to use any unused memory for disk caching, so it may not go to waste, assuming the processes do not open files in such a way as to tell the OS not to bother doing this. The limit being per-process is more helpful in a Unix-like environment where services tend to be process based rather than thread based (multiple threads in one process share the processes resources and therefore share a single 3Gb virtual address space) as is more common under Windows (starting a new process in Windows as quite expensive so threads are preferred, under most Unix environments starting a new process isn't much more resource consuming than starting a new thread). It is even possible for 32-bit processes under 32-bit Windows variants to access more than the 32-bit address space would allow, if PAE is anabled and the process is capable of using it.Īn individual 32-bit process (that is not AWE aware) is usually limited to 3Gb (the first Gb of its virtual address space being reserved for kernel related action) but if you are running multiple processes then they will be able to use more in total (each can use up to 3Gb, total memory permitting) as their virtual address spaces are not shared.

If the app is AWE aware then they can use an address space beyond 4Gb, though less efficiently than a 64-bit app would.
