Memory Layout
| Start (octal) | End (octal) | Use |
|---|---|---|
| 000_000_000_000_0000 | 000_000_000_001_0000 | Null Page |
| 000_000_000_001_0000 | LOWER_HALF_TOP - 1pg | User-Mode Memory |
| LOWER_HALF_TOP - 1pg | LOWER_HALF_TOP | User-Mode Env Blocks |
| LOWER_HALF_TOP | HIGHER_HALF_BASE | Non-Canonical (No Use) |
| HIGHER_HALF_BASE | -640_000_000_000_0000 | Nonpaged Pool |
| -640_000_000_000_0000 | -740_000_000_000_0000 | Paged Pool |
| -740_000_000_000_0000 | -754_000_000_000_0000 | Per-Cpu IST Stacks |
| -754_000_000_000_0000 | -757_000_000_000_0000 | Per-Cpu Data Blocks |
| -757_000_000_000_0000 | -757_600_000_000_0000 | SYSPTE Mapping Space |
| -757_600_000_000_0000 | -760_000_000_000_0000 | Loader Persistent Data |
| -764_000_000_000_0000 | -765_777_000_000_0000 | PFMdb |
| -765_777_000_000_0000 | -766_000_000_000_0000 | PFM Presence Bitmap |
| -766_000_000_000_0000 | -766_000_000_000_0000 | TTBR0 Mirror (Aarch64) |
| -767_000_000_000_0000 | -767_000_000_000_0000 | CR3/TTBR1 Mirror |
| -767_767_767_767_0000 | root page table | |
| -767_767_767_766_0000 | TTBR0 (aarch64 only) | |
| -770_000_000_000_0000 | -777_000_000_000_0000 | Framebuffer(s) |
| -777_776_000_000_0000 | TOP_OF_MEMORY | Kernel Code/Data Image |
Negative addresses represent values sign-extended to the architectural address width.
TOP_OF_MEMORY is defined as one above the maximum representable virtual address.
The definitions of LOWER_HALF_TOP and HIGHER_HALF_BASE depend on the architecture, as follows:
| Arch | LOWER_HALF_TOP | HIGHER_HALF_BASE |
|---|---|---|
| x86_64 | 400_000_000_0000 | -400_000_000_0000 |
| aarch64 | 1_000_000_000_0000 | -1_000_000_000_0000 |