C/C++:[11]自动存储、静态存储和动态存储
C++有3种常见管理数据内存的方式:自动存储、静态存储和动态存储。其中动态存储也叫做自由存储空间或堆。注:C++11新增第四种类型——线程存储。
![C/C++:[11]自动存储、静态存储和动态存储](https://exp-picture.cdn.bcebos.com/116b1ae23ea23a42930281a43733ec3835bbc0cf.jpg)
工具/原料
Microsoft Visual Studio 2012(或其他版本)
一、自动存储
1、在函数内部定义的常规变量称为自动变量,使用自动存储空间。即这些变量在函数被调用时自动生成,在函数调用结束后自动消亡。
2、自动变量是一个局部变量,其作用域为包含它的代码块(指被花括号括起来的一段代码)。
3、自动变量通常存储在栈中。在代码块执行时,其中包含的自动变量将依次加入到栈中,而代码块执行完后,则将按照相反的顺序释放这些变量。注:栈是一种存储结构,其特性是后进先出(Last In First Out,LIFO)。
4、自动存储变量示例:int fuc(void){ int time = 0; return 0;}则上面的int型变量time因为在函数fuc内部声明而使用自动存储。
二、静态存储
1、顾名思义,静态存储是在整个程序执行期间都存在的存储方式。
2、使变量称为静态存储有两种方式:1、将变量声明放在函数外部;2、在函数内部使用static关键字声明变量。
3、方式1示例:int time = 0;int main(){ return 0;}上面的int型变量time为静态存储。
4、方式2示例:int fuc(void){ stat坡纠课柩ic int time1 = 0; return 0;}则上面的int型局部变量time1因为有static修饰而使用静态存储。
三、动态存储
1、动态存储比自动变量和静态变量更灵活。C++使用new和delete关键字来声明和销毁动态变量。
2、new和delete管理一个内存池,在C++中称为自由存储空间(free store)或堆(heap)。该内存池和用于存储自动变量和静态变量的内存是分开的。
3、C++允许程序员在一个函数中使用new分配内存,而在另一个函数中释放它。因此数据的生命周期完全不受函数的生存时间控制。
4、与使用常规变量相比,使用new恽但炎杰和delete让程序员对程序如何使用内存有了更大的控制权。不过同时也使内存管理变得复杂,因为在栈中,自动添加和自动删除机制使得占用的内存总是连续的,但使用n髫潋啜缅ew和delete可能使占用的自由存储空间不连续,这使得追踪新分配的内存位置更加困难。