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