
一、内核空间
1.1.操作系统内核占用。
1.2.用户态程序无权访问,试图访问会导致段错误。
二、栈(Stack)
2.1.生长方向:向下(高地址 → 低地址)
2.2.内容: 函数局部变量 函数参数 返回地址、保存的寄存器
2.3.管理方式:自动管理(函数调用时压栈,返回时弹栈)
2.4.特点:速度快,大小有限(通常几 MB),溢出导致"栈溢出".
三、 内存映射段(Memory Mapping Segment)
3.1.用于加载共享库、大文件映射、匿名内存等。
3.2.通过 mmap() 系统调用分配。
3.3.位于堆和栈之间,避免两者冲突。
四、 堆(Heap)
4.1.生长方向:向上(低地址 → 高地址)
4.2.存储内容:动态分配的内存(malloc, calloc, realloc, new)
4.3.管理方式:手动管理 ------ 程序员负责 free / delete,否则泄漏;OS 在进程结束时回收
4.4.特点:容量大(受限于虚拟内存),但分配较慢,易碎片化
5. 数据段(Data Segment)
5.1.存放已初始化的全局变量和静态变量
包括:
.data 段:已初始化的全局/静态变量
.bss 段:未初始化或初值为0的全局/静态变量(运行时清零)
5.2. 生命周期:整个程序运行期间 访问权限:可读写
六、 代码段(Text Segment)
6.1.存放程序的机器指令(编译后的二进制代码) 也包含字符串字面量、const 全局常量等只读数据
6.2.访问权限:通常只读 + 可执行(防止修改代码) 生命周期:程序启动即加载,退出才卸载
七、总结口诀(便于记忆)
上栈下堆中间映,
数据代码底下停。
栈自管,堆手控,
全局静态住数据,
代码只读永不动。