- 典型的C内存空间分布图
数据(data)段
一部分是读写区(RW):存放已初始化但非零的全局变量和静态变量.
其中,有一部分是只读区(RO): 如常量字符串文本, 使用const定义的变量BSS段
BSS: Block Started by Symbol
它包括未初始化的全局变量和静态变量和初始化为0的全局变量和静态变量.
举个栗子:
/***hello.c***/
#include <stdio.h>
int a;
int main()
{
static int b;
printf("a = %d\n",a);
printf("b = %d\n",b);
return 0;
}
运行,结果是:
a = 0
b = 0
可见, 未初始化的全局变量或是静态变量, 被编译器置为0.
栈(stack)段
用于存储局部变量, 函数参数和返回地址, 栈空间由编译器自动分配和释放。堆(heap)段
调用malloc()等函数时从堆中动态分配内存, 调用free()函数将内存归还给堆.