Imaginarium

Memory Layout

Start (octal)End (octal)Use
000_000_000_000_0000000_000_000_001_0000Null Page
000_000_000_001_0000LOWER_HALF_TOP - 1pgUser-Mode Memory
LOWER_HALF_TOP - 1pgLOWER_HALF_TOPUser-Mode Env Blocks
LOWER_HALF_TOPHIGHER_HALF_BASENon-Canonical (No Use)
HIGHER_HALF_BASE-640_000_000_000_0000Nonpaged Pool
-640_000_000_000_0000-740_000_000_000_0000Paged Pool
-740_000_000_000_0000-754_000_000_000_0000Per-Cpu IST Stacks
-754_000_000_000_0000-757_000_000_000_0000Per-Cpu Data Blocks
-757_000_000_000_0000-757_600_000_000_0000SYSPTE Mapping Space
-757_600_000_000_0000-760_000_000_000_0000Loader Persistent Data
-764_000_000_000_0000-765_777_000_000_0000PFMdb
-765_777_000_000_0000-766_000_000_000_0000PFM Presence Bitmap
-766_000_000_000_0000-766_000_000_000_0000TTBR0 Mirror (Aarch64)
-767_000_000_000_0000-767_000_000_000_0000CR3/TTBR1 Mirror
-767_767_767_767_0000root page table
-767_767_767_766_0000TTBR0 (aarch64 only)
-770_000_000_000_0000-777_000_000_000_0000Framebuffer(s)
-777_776_000_000_0000TOP_OF_MEMORYKernel 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:

ArchLOWER_HALF_TOPHIGHER_HALF_BASE
x86_64400_000_000_0000-400_000_000_0000
aarch641_000_000_000_0000-1_000_000_000_0000