C++内存模型与智能指针50问
📚 共计 50 章节
第1章
内存布局:栈、堆、全局/静态区、常量区、代码区详解
程序内存分区全景,理解每个区域的作用与生命周期
内存模型
基础
第2章
栈内存:自动管理、生命周期、栈溢出风险
函数调用的幕后,栈帧与自动变量的奥秘
栈
生命周期
第3章
堆内存:手动管理、new/delete、内存泄漏根源
动态内存分配,掌握堆的分配与释放机制
堆
new/delete
第4章
全局/静态区:静态变量、全局变量、生命周期
程序启动到结束,全局与静态对象的存储
静态区
全局
第5章
常量区:字符串常量、const变量存储位置
只读数据段,常量与字符串的存放规则
常量区
const
第6章
代码区:只读、函数代码存储
可执行指令的存放,代码段与只读保护
代码区
只读
第7章
内存对齐:为什么需要对齐、alignof/alignas
CPU访问效率与结构体对齐规则
对齐
性能
第8章
内存碎片:内部碎片与外部碎片
碎片产生原因及对系统的影响
碎片
内存管理
第9章
RAII思想:资源获取即初始化、栈展开
C++核心资源管理哲学,异常安全的基础
RAII
资源管理
第10章
智能指针概述:为什么需要智能指针、三种智能指针对比
告别裸指针,智能指针家族总览
智能指针
对比
第11章
unique_ptr:独占所有权、移动语义、make_unique
轻量级独占指针,现代C++首选
unique_ptr
移动语义
第12章
unique_ptr:自定义删除器、数组支持
灵活删除器与数组特化版本
删除器
数组
第13章
shared_ptr:共享所有权、引用计数原理
引用计数如何实现共享,控制块详解
shared_ptr
引用计数
第14章
shared_ptr:make_shared、性能优势
一次分配,控制块与对象合并
make_shared
性能
第15章
shared_ptr:循环引用问题、weak_ptr引入
环形依赖导致的内存泄漏,弱指针破局
循环引用
weak_ptr
第16章
weak_ptr:弱引用、lock()、expired()
弱回调与缓存场景,安全访问
weak_ptr
lock
第17章
智能指针与裸指针混用:危险场景、最佳实践
混用陷阱与安全准则
混用
最佳实践
第18章
智能指针与STL容器:存储智能指针的容器
vector
与容器兼容性
STL
容器
第19章
智能指针与多态:基类指针管理派生类对象
多态删除与虚析构函数
多态
继承
第20章
智能指针与多线程:shared_ptr的线程安全性
引用计数原子操作,控制块安全
多线程
线程安全
第21章
自定义删除器:函数对象、lambda表达式
灵活的资源清理,文件句柄、socket等
删除器
lambda
第22章
enable_shared_from_this:原理与使用场景
安全获取自身shared_ptr,异步回调利器
enable_shared
异步
第23章
内存泄漏检测:Valgrind、AddressSanitizer
Linux下两大检测工具使用与解读
Valgrind
ASan
第24章
内存泄漏检测:Visual Studio诊断工具
VS内置诊断与CRT调试堆
VS
诊断
第25章
内存泄漏检测:CRT调试堆
Windows平台C运行时调试技术
CRT
调试
第26章
内存泄漏常见模式:忘记delete、异常安全
经典泄漏场景与RAII解决方案
泄漏模式
异常安全
第27章
内存泄漏常见模式:容器中指针未释放
容器存储裸指针的清理问题
容器
泄漏
第28章
内存泄漏常见模式:循环引用
shared_ptr相互引用导致泄漏
循环引用
weak_ptr
第29章
内存泄漏常见模式:全局/静态容器持有指针
程序退出时未清理全局容器
全局
静态
第30章
内存泄漏常见模式:回调函数中的this指针
异步回调中对象生命周期管理
回调
this
第31章
内存泄漏常见模式:第三方库内存管理
库分配库释放,跨模块问题
第三方库
跨模块
第32章
内存泄漏常见模式:多线程中的内存泄漏
线程局部存储与同步问题
多线程
泄漏
第33章
内存泄漏常见模式:异常路径中的泄漏
异常导致资源未释放
异常
安全
第34章
内存泄漏常见模式:虚析构函数缺失
基类析构非虚导致部分销毁
虚析构
多态
第35章
内存泄漏常见模式:placement new使用不当
定位new与显式析构调用
placement new
构造
第36章
内存池:原理、实现、应用场景
预分配与复用,减少malloc调用
内存池
性能
第37章
对象池:复用对象、减少分配
避免频繁构造/析构,对象缓存
对象池
复用
第38章
写时复制:COW技术、std::string实现
共享数据直到写入,延迟复制
COW
string
第39章
移动语义与完美转发:std::move、std::forward
右值引用与转发,避免拷贝
移动语义
完美转发
第40章
右值引用:移动构造函数、移动赋值运算符
深拷贝优化,资源转移
右值引用
移动构造
第41章
拷贝省略:RVO、NRVO、C++17保证
编译器优化与返回值消除
RVO
NRVO
第42章
异常安全:基本保证、强保证、不抛异常保证
异常安全级别与实现策略
异常安全
保证
第43章
noexcept:移动操作与异常安全
移动操作不应抛出异常
noexcept
移动
第44章
内存排序:memory_order、原子操作
原子操作与内存序,并发基石
原子操作
memory_order
第45章
无锁编程:CAS、ABA问题
无锁数据结构与ABA问题解决
无锁
CAS
第46章
缓存友好:局部性原理、缓存行、伪共享
CPU缓存优化,避免伪共享
缓存
伪共享
第47章
内存屏障:编译器屏障、CPU屏障
指令重排与内存可见性
内存屏障
重排
第48章
虚拟内存:页表、TLB、缺页中断
操作系统虚拟内存机制
虚拟内存
页表
第49章
内存映射文件:mmap、大文件处理
文件直接映射到内存空间
mmap
大文件
第50章
内存管理最佳实践:总结与项目实战建议
综合指南,构建健壮C++项目
最佳实践
总结