C++的内存管理
静态内存管理、自动内存分配、动态内存管理。
C++的内存管理
前言
C++内存管理 包括 静态内存管理
、自动内存分配
、动态内存管理
三个方面。
静态内存管理
静态内存管理(Static Memory)。
特点
分配方式:内存地址在编译期确定,程序启动时分配。
生命周期:与程序生命周期一致,直到程序结束才释放。
存储位置:全局/静态存储区(包括全局变量、
static
变量、字符串常量等)。
优点
无需手动管理:由系统自动分配和释放。
高效访问:内存地址固定,访问速度快。
缺点
内存占用:始终占用内存,即使不再使用。
潜在问题:滥用静态变量可能导致代码耦合、线程不安全或不可预测的副作用。
自动内存分配
自动内存分配(Automatic Memory)。
特点
分配方式:在栈(Stack)上分配,由编译器自动管理。
生命周期:变量进入作用域时分配,离开作用域时自动释放(如函数返回或代码块结束)。
存储位置:栈内存(由系统管理,大小有限,默认几 MB)。
优点
高效安全:分配/释放仅需移动栈指针,速度快且无泄漏风险。
作用域隔离:变量生命周期与代码逻辑严格绑定,减少意外访问。
缺点
栈溢出:栈空间有限,大对象或深递归可能崩溃。
灵活性差:无法动态调整大小或延长生命周期。
动态内存管理
动态内存管理(Dynamic Memory)。
C++的动态内存管理
有多种实现方式:
- new、delete操作符。
- 智能指针。
- 通过 RAII(Resource Acquisition Is Initialization,资源获取即初始化)管理内存等资源。
特点
手动分配与释放:通过
new/delete
或 malloc/free 或智能指针
管理。生命周期可控:对象存活时间由程序员决定。
灵活性高:可动态分配任意大小的内存(如运行时确定数组大小)。
使用场景
需要动态调整大小的数据结构(如链表、树)。
对象生命周期超出当前作用域(如跨函数传递数据)。
大内存需求(避免栈溢出)。
缺点
内存泄漏:忘记释放内存。
悬空指针:访问已释放的内存。
碎片化:频繁分配/释放导致内存碎片。
本文由作者按照 CC BY 4.0 进行授权