C语言内存布局 #
一、内存分区 #
1.1 五大区域 #
text
高地址
┌──────────────┐
│ 栈区 │ ← 局部变量、函数参数
│ ↓ │
├──────────────┤
│ ↑ │
│ 堆区 │ ← 动态分配
├──────────────┤
│ BSS段 │ ← 未初始化全局变量
├──────────────┤
│ 数据段 │ ← 已初始化全局变量
├──────────────┤
│ 代码段 │ ← 程序代码
└──────────────┘
低地址
二、各区域说明 #
2.1 栈区 #
c
void func() {
int a = 10;
char str[20];
}
- 自动管理
- 向下增长
- 大小有限
2.2 堆区 #
c
int* p = (int*)malloc(sizeof(int));
free(p);
- 手动管理
- 向上增长
- 空间较大
2.3 全局区 #
c
int global = 100;
static int count;
- 程序期存在
- 自动初始化为0
2.4 代码区 #
c
void func() {
printf("Hello\n");
}
- 只读
- 存储程序指令
三、总结 #
| 区域 | 内容 | 特点 |
|---|---|---|
| 栈 | 局部变量 | 自动管理 |
| 堆 | 动态内存 | 手动管理 |
| BSS | 未初始化全局 | 自动清零 |
| 数据 | 已初始化全局 | 程序期 |
| 代码 | 程序指令 | 只读 |
下一步,让我们学习动态内存分配!
最后更新:2026-03-26