C语言中,定义了5个内存区间:代码区;全局变量和静态变量区;局部变量区即栈区;动态存储区,即堆区;常量区。
1)栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。
2)堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。
3)全局区(静态区)(static)—全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的 另一块区域。 - 程序结束后由系统释放。
4)常量区 —常量字符串就是放在这里的。 程序结束后由系统释放。
5)程序代码区—存放函数体的二进制代码。
也可以说分成5个段:
text:存放的是程序中的可执行代码
data (initialized): 保存的是已经初始化了的全局变量的静态变量
bss: 存放的是未初始化的全局变量和静态变量
stack:保存函数的局部变量(但不包括static声明的变量, static 意味着 在数据段中 存
放变量),参数以及返回值
heap: 保存函数内部动态分配内存