内存管理:
代码区:储存编译后函数体的二进制代码,以及字符串常量,该区域是只读的。
如:char *p="1234"; //"1234"存在代码区。
数据区:存储初始化的全局变量、静态变量、一般常量。
BSS区:存储未初始化的全局变量、静态变量。BSS段的特点就是变量会被初始化为0。
堆区:由程序员手动开辟、释放。开辟空间:malloc():返回值是一个void类型的指针,不能初始化所分配的内存空间。calloc():可以初始化所分配的内存空间。释放空间:free()。
栈区:由系统自动分配、释放。存放函数的参数值、局部变量等。
注:堆区和栈区的内存是在程序执行时由系统分配的。BSS区、数据区和代码区是在程序执行开始阶段由编译器分配内存,三个区域的内存在程序运行时会一直存在,不会被临时回收。
存储类型:
auto:自动类型(让系统分配内存)
如:int i=10; /auto int i=10; //缺省状态下默认是auto类型。
register:寄存器类型(提高运行速率)
如:register int i=10; //有可能会申请失败,失败自动转为auto类型。
static:静态存储类型。
静态局部变量在函数结束时不会被释放,继续保留原值。