0%

进程的地址空间

进程的地址空间

地址空间的组成

区域 功能
代码段(Text Segment) 存放可执行程序的代码(指令),通常是只读的,以防止程序错误修改自身代码。
数据段(Data Segment) 存放已初始化的全局变量和静态变量。
BSS 段(BSS Segment) 存放未初始化的全局变量和静态变量,初始化为 0。
堆(Heap) 动态内存分配区(如通过 malloc 或 new 分配的内存),从低地址向高地址扩展。
栈(Stack) 用于函数调用时保存局部变量、返回地址等,从高地址向低地址扩展。
内核空间(Kernel Space) 一部分地址空间通常被保留给内核,用于操作系统管理,用户进程无法直接访问。

地址空间布局

  • 操作系统通常为进程提供固定的地址空间布局,例如:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
低地址
+--------------------+
| 代码段 |
+--------------------+
| 数据段 |
+--------------------+
| BSS 段 |
+--------------------+
| 堆 |
| (向高地址增长) |
+--------------------+
| 未使用空间 |
+--------------------+
| 栈 |
| (向低地址增长) |
+--------------------+
高地址