定义:变量的生存期是指其在程序运行时占用内存空间的时间段。
1. 静态生存期
从程序开始执行时分配到程序结束时收回。
如:全局变量
2. 自动生存期
从程序执行到定义它们的复合语句时分配到复合语句执行完毕时收回。
如:局部变量、函数的参数
3. 动态生存期
用new操作或者malloc函数来进行分配,用delete操作或者调用free函数来收回。
注:
1. 在定义局部变量时,使用auto、static、register来显式指出它们的生存期。
auto: 默认,自动生存期
static: 静态生存期,在函数多次调用时,可以保留上次调用的结果。
register: 自动生存期,与auto不同在于,建议(不是一定)编译程序把该局部变量的空间分配在CPU寄存器中,其目的是为了提高对局部变量的访问效率。
2. 内存空间分为四个部分:静态数据区、代码区、栈区、堆区
静态数据区:全局变量、static存储类的局部变量、常量
代码区: 函数代码
栈区: auto存储类的局部变量、函数的形参、函数调用时的有关信息(如返回值)
堆区: 动态变量
静态数据区和代码区的大小是固定的,而栈区和堆区的大小随程序的运行不断变化(不过操作系统会对其空间最大值有一定的限制)。
3. 编译程序隐式自动将静态生存期的变量按位模式初始化为0,其他变量不对其进行初始化(使用空间中的已有值,因此是不固定的)