学习目标

  • 理解内存分段
  • 掌握地址空间布局
  • 学习内存映射

2.1 内存分段

典型的程序内存布局:

高地址
┌─────────────┐
│    栈       │ 向下增长
├─────────────┤
│     ↓       │
│             │
│     ↑       │
├─────────────┤
│    堆       │ 向上增长
├─────────────┤
│   .bss      │ 未初始化数据
├─────────────┤
│   .data     │ 已初始化数据
├─────────────┤
│   .text     │ 代码段
└─────────────┘
低地址

2.2 QEMU virt 内存映射

0x00000000 - 0x00000FFF : 保留
0x00001000 - 0x0000FFFF : CLINT
0x0C000000 - 0x0FFFFFFF : PLIC
0x10000000 - 0x10000FFF : UART0
0x80000000 - 0x87FFFFFF : RAM (128MB)

2.3 程序加载地址

QEMU 将内核加载到 0x80000000,这是 RISC-V 的标准起始地址。

下一步

链接脚本详解

更新时间: