下面从地址空间划分、高端内存、页表结构、内核映射、内存域、MMU与权限、性能特性七个方面,清晰对比 ARM32(ARMv7)与 ARM64(AArch64)Linux 的内存管理差异。
一、虚拟地址空间划分(最直观差异)
ARM32(32位,4GB总空间)
- 默认 3G/1G 分割(可通过 CONFIG_VMSPLIT 改 2:2 或 1:3)
- 用户: 0x00000000 ~ 0xBFFFFFFF (3GB,每进程独立)
- 内核: 0xC0000000 ~ 0xFFFFFFFF (1GB,所有进程共享)
ARM64(64位,默认48位地址,256TB总空间)
- 固定 128TB/128TB 对称分割
- 用户: 0x000000000000 ~ 0x0000FFFFFFFFFFFF (低128TB)
- 内核: 0xFFFF000000000000 ~ 0xFFFFFFFFFFFFFFFF (高128TB)
- 无地址空间大小限制,不存在32位的4GB瓶颈。
二、高端内存(Highmem):ARM32 的痛点,ARM64 完全消失
ARM32:必须有 Highmem
- 内核仅 1GB 虚拟地址,直接映射(线性映射)最多 896MB 物理内存( PAGE_OFFSET=0xC0000000 )
- 物理内存 > 896MB 时,超出部分为 Highmem(高端内存),需临时映射( kmap / kunmap )或永久映射( pkmap ),开销大、有锁、不可直接访问
- 典型划分:- 0xC0000000 ~ 0xF0000000 :线性映射(896MB,lowmem)
- 0xF0000000 ~ 0xF8000000 :pkmap(永久映射Highmem,约128MB)
- 0xF8000000 ~ 0xFFFFFFFF :vmalloc、fixmap、ioremap 等
ARM64:彻底无 Highmem
- 内核空间巨大(128TB),所有物理内存都可直接线性映射( PAGE_OFFSET=0xFFFF800000000000 )
- 无需 kmap/pkmap,内核可直接访问全部物理内存,无映射开销、无锁、性能高
三、页表结构(层级与复杂度)
ARM32:2~3 级页表,硬件限制多
- 4KB 页:2 级页表(PGD → PTE),Linux 逻辑上视为 3 级(含 PMD)
- 64KB 大页:1 级段映射
- 页表项(PTE)无完整的 dirty/accessed 位,Linux 需做兼容处理
ARM64:3~4 级页表,规整强大
- 4KB 页:3 级(39位/512GB)或 4 级(48位/256TB)(PGD → PUD → PMD → PTE)
- 64KB 页:2 级页表
- 页表项硬件原生支持所有内存管理标志(dirty、accessed、NX、PXN 等),Linux 无需 workaround
四、内核线性映射(直接映射)
ARM32
- 线性映射区 仅 896MB,物理内存超过即需 Highmem
- 虚拟地址 ↔ 物理地址: virt = phys + 0xC0000000 (仅限 lowmem)
ARM64
- 线性映射区 覆盖全部物理内存(最大支持 PB 级)
- 虚拟地址 ↔ 物理地址: virt = phys + 0xFFFF800000000000 (全局统一)
五、内存域(ZONE)划分
ARM32
- ZONE_NORMAL :lowmem(≤896MB),内核直接访问
- ZONE_HIGHMEM :>896MB,需动态映射
- ZONE_DMA :低端物理内存(通常 <256MB),用于 DMA 设备
ARM64
- 无 ZONE_HIGHMEM
- ZONE_DMA / ZONE_DMA32 :按物理地址范围划分(如 <4GB),用于 32 位 DMA 设备
- 所有内存都属于 ZONE_NORMAL (线性映射),管理更简单
六、MMU 与特权级、安全特性
ARM32(ARMv7)
- 特权级:EL0(用户)、EL1(内核)
- 页表基址: TTBR0 (用户)、 TTBR1 (内核),32 位
- 安全扩展:TrustZone(Secure/Non-Secure),但内存隔离较弱
- 无 NX(不可执行)、PXN(特权不可执行) 硬件原生支持,需软件模拟
ARM64(ARMv8)
- 特权级:EL0~EL3(EL2 虚拟化、EL3 安全监控)
- 页表基址: TTBR0 (用户,64位)、 TTBR1 (内核,64位),按地址最高位(bit63)自动选择
- 硬件原生支持:NX、PXN、PAN(特权不可访问用户),安全性大幅提升
- 更严格的内存权限控制,漏洞利用难度更高
七、性能与适用场景
ARM32
- 优势:代码小、占用内存少、适合低端嵌入式(<1GB 内存)
- 劣势:Highmem 映射开销大、内存 >1GB 性能下降、4GB 地址瓶颈
ARM64
- 优势:无 Highmem、线性映射全部内存、页表规整、安全特性强、支持大内存(>4GB)、性能高
- 劣势:代码体积大、内存占用多、需 64 位硬件支持
总结:一句话核心差异

- ARM32:4GB 地址受限、内核仅 1GB、必须 Highmem、页表简单但有缺陷、安全弱、适合小内存嵌入式。
- ARM64:256TB 地址空间、内核直接映射全部内存、无 Highmem、页表强大规整、安全强、适合大内存服务器/高端嵌入式。