Virtual Address Space
The virtual address space for a process is the set of virtual memory addresses that it can use. The address space for each process is private and cannot be accessed by other processes unless it is shared.
A virtual address does not represent the actual physical location of an object in memory; instead, the system maintains a page table for each process, which is an internal data structure used to translate virtual addresses into their corresponding physical addresses. Each time a thread references an address, the system translates the virtual address to a physical address.
The virtual address space for 32-bit Windows is 4 gigabytes (GB) in size and divided into two partitions: one for use by the process and the other reserved for use by the system. For more information about the virtual address space in 64-bit Windows, see Virtual Address Space in 64-bit Windows.
For more information about virtual memory, see the following topics:
- Virtual Address Space and Physical Storage
- Working Set
- Page State
- Scope of Allocated Memory
- Data Execution Prevention
- Memory Protection
- Memory Limits for Windows Releases
The following table shows the default memory range for each partition.
|Low 2GB (0x00000000 through 0x7FFFFFFF)||Used by the process.|
|High 2GB (0x80000000 through 0xFFFFFFFF)||Used by the system.|
If 4-gigabyte tuning (4GT) is enabled, the memory range for each partition is as follows.
|Low 3GB (0x00000000 through 0xBFFFFFFF)||Used by the process.|
|High 1GB (0xC0000000 through 0xFFFFFFFF)||Used by the system.|
After 4GT is enabled, a process that has the IMAGE_FILE_LARGE_ADDRESS_AWARE flag set in its image header will have access to the additional 1 GB of memory above the low 2 GB.
You can use the following command to set a boot entry option that configures the size of the partition that is available for use by the process to a value between 2048 (2 GB) and 3072 (3 GB):
BCDEdit /set increaseuserva Megabytes
After the boot entry option is set, the memory range for each partition is as follows.
|Low (0x00000000 through Megabytes)||Used by the process.|
|High (Megabytes+1 through 0xFFFFFFFF)||Used by the system.|
Windows Server 2003: Set the /USERVA switch in boot.ini to a value between 2048 and 3072.