
区域 | 存储内容 | 生命周期 | 分配方式 | 访问速度 | 风险/注意事项 |
|---|---|---|---|---|---|
代码段 | 可执行指令、字面量字符串 | 程序运行期间 | 编译时静态分配 | 最快 | 不可修改(修改会触发段错误) |
数据段 | 已初始化全局/静态变量 | 程序运行期间 | 编译时静态分配 | 快 | 持续占用内存 |
BSS段 | 未初始化全局/静态变量 | 程序运行期间 | 运行时零初始化 | 快 | 自动清零,节省磁盘空间 |
堆 | 动态分配的对象(malloc/new) | 手动管理(free/delete) | 运行时系统调用(sbrk/mmap) | 较慢 | 内存泄漏、碎片化、需手动释放 |
栈 | 局部变量、函数调用帧 | 函数执行期间 | 自动分配/回收(SP指针) | 最快 | 栈溢出(Stack Overflow) |
内存映射段 | 文件映射、共享库、匿名映射 | 手动管理(munmap) | 运行时系统调用(mmap) | 中等 | 需处理映射错误、同步问题 |
高地址 ──────────────────────────────────────────────────────────────────
│ │
│ 命令行参数和环境变量 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ 栈 (向下增长) │
│ ├─ 函数调用帧 │
│ ├─ 局部变量 │
│ └─ ... │
│ │
├─────────────────────────────────────────────────────────────────┤
│ │
│ 内存映射段 │
│ ├─ 文件映射 │
│ ├─ 共享库 │
│ └─ 匿名映射 │
│ │
├─────────────────────────────────────────────────────────────────┤
│ │
│ 堆 (向上增长) │
│ ├─ 动态分配的对象 │
│ └─ ... │
│ │
├─────────────────────────────────────────────────────────────────┤
│ │
│ BSS段 (未初始化数据) │
│ ├─ 未初始化全局变量 │
│ └─ 未初始化静态变量 │
│ │
├─────────────────────────────────────────────────────────────────┤
│ │
│ 数据段 (已初始化数据) │
│ ├─ 已初始化全局变量 │
│ └─ 已初始化静态变量 │
│ │
├─────────────────────────────────────────────────────────────────┤
│ │
│ 代码段 (可执行指令) │
│ ├─ 函数体 │
│ └─ 字面量字符串 │
│ │
└─────────────────────────────────────────────────────────────────┘ 低地址