C++的内存管理与内存分配方式,实际上是两个问题。
C++程序在编译与运行过程中,实际上可能用到五种存储区域。
- 栈(stack)。函数运行过程中创建的局部变量都存储在栈上。随着函数或代码块的运行结束,这些局部变量的空间也会被自动回收。栈的优点是栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。
- 堆(heap)。也成为动态存储区。使用new,malloc操作可以动态地分配这部分内存。优点是动态存储区的内存分配和回收都由程序员决定,缺点是如果忘记回收,可能造成内存泄漏,并且分配次数过多可能产生堆碎片。
- 全局区或静态区 --存放全局变量和静态变量;程序结束时由系统释放,分为全局初始化区和全局未初始化区;
- 字符常量区 --常量字符串放与此,程序结束时由系统释放;
- 程序代码区--存放函数体的二进制代码
而在分配内存时,有三种方式
- 从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。
- 在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。
- 从堆上分配,亦称动态内存分配。程序在运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何时用free或delete释放内存。
动态内存的生存期由程序员决定,使用非常灵活,但如果在堆上分配了空间,就有责任回收它。
原文地址:https://www.cnblogs.com/mockingbirdbad/p/10582009.html
时间: 2024-11-02 14:20:21