C++面试常见问题——14内存管理
内存管理
内存管理由三种方式:
- 自动存储
- 静态存储
- 动态存储
自动存储
对于函数的形参、函数内部变量、和结构体变量等,编译器在函数运行过程中在栈中自动对其分配内存,调用结束后对其进行销毁。变量的声明周期只存在于当前代码块,这使得程序员可以在不同函数内使用相同的变量名。
c++对栈存储区的使用可以有效地减少程序所用的内存空间。
int add(int a,int b){
if(a > 0 && b > 0){
int result = a +b; //result的生命周期只存在于if语句内
}
//return result; 此时result已经被销毁,无法再使用
}
静态存储
每个程序对应着一个静态存储区(全局数据区),编译器会对某些程序实体预分配存储地址和内存空间,程序一开始执行这些变量就会被创建,直到整个程序结束才会被释放。
extern用于声明全局变量,分为定义性声明和引用性声明:
extern int GlobalInt = 3; //全局变量需要在声明时初始化,为手动初始化时编译器会自动将其初始化为0
//这就是定义性声明
void fun{
extern double GlobalDouble; //引用性声明,必须有已声明的全局变量GlobalDouble
...
}
动态存储
人为的开辟空间与释放空间,都由人手动设定(千万别忘了释放!!!)
浙公网安备 33010602011771号