C语言中,定义了5个内存区间:代码区;全局变量和静态变量区;局部变量区即栈区;动态存储区,即堆区;常量区。


1)栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。

2)堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。 

3)全局区(静态区)(static)—全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的 另一块区域。 - 程序结束后由系统释放。 

4)常量区 —常量字符串就是放在这里的。 程序结束后由系统释放。 

5)程序代码区—存放函数体的二进制代码。


也可以说分成5个段:

text:存放的是程序中的可执行代码

data (initialized): 保存的是已经初始化了的全局变量的静态变量

bss: 存放的是未初始化的全局变量和静态变量

stack:保存函数的局部变量(但不包括static声明的变量, static 意味着 在数据段中 存

放变量),参数以及返回值

heap: 保存函数内部动态分配内存