C语言的内存管理

转载自:https://www.cnblogs.com/tuhooo/p/7221136.html

对于一个C语言程序,内存空间主要有5个部分组成:代码段(.text),数据段(.data),BSS区,堆,栈

代码段代码区(text segment)。存放CPU执行的机器指令(machine instructions)。通常,代码区是可共享的(即另外的执行程序可以调用它),因为对于频繁被执行的程序,只需要在内存中有一份代码即可。代码区通常是只读的,使其只读的原因是防止程序意外地修改了它的指令。另外,代码区还规划了局部变量的相关信息。

数据段:存放已初始化全局变量,静态变量(包括全局静态变量和局部静态变量),和常量数据(例如常量字符串)

BSS:未初始化数据区,Uninitialized data segment,存入的是全局未初始化变量,例如不在任何函数内的声明:int a;BSS 是英文Block Started by Symbol 的简称。BSS 段属于静态内存分配,即程序一开始就将其清零了。一般在初始化时BSS段部分将会清零。

:用于动态内存分配,程序员自己分配和释放

:编译器自动分配和释放,存放局部变量,函数参数,返回数据等。


C语言的内存管理

栈是向下增长的,堆是向上增长的,最大化了可用空间。