函数内的局部变量是在函数体执行前分配空间。函数执行完毕后回收空间。
具体地说,对于定义在函数内部的非静态局部变量(auto)会在调用函数时在系统的栈区预先分配好存储空间,并在执行到该变量的声明语句时进行初始化,由于栈区的数据并不会初始化为0,因此若在定义时不进行初始化则相当于随机初始化。在函数调用结束后回收分配的栈区空间,因此局部变量的内存空间分配是在程序运行时进行的。静态变量是在程序运行时分配空间。程序结束时回收空间。
具体地说,静态变量和全局变量会在编译时就进行BSS区进行内存的分配,并对于已经确定的变量进行初始化。由于该存储区会进行的值全为0,因此未初始化的变量会默认进行0初始化。在程序运行结束后会自动回收分配出的空间。
以上两种变量内存空间的分配都是由操作系统完成的。
- 使用new或者malloc创建的变量是在调用new,malloc函数的时候在堆区进行分配。调用delete,free函数的时候进行回收。