前言

无论使用何种编程语言,程序都需要经常进行内存分配和管理。但具体如何进行内存管理,则取决于编程语言和应用领域:实时系统、嵌入式系统、游戏开发和传统桌面应用程序各有不同的需求和限制,并不存在“银弹”方案。

本书将展示现代C++如何让开发者编写更简单、更安全的程序,同时揭示这门语言如何赋予开发者掌控内存分配机制的能力,确保程序满足特定约束条件。从对象生命周期和内存组织这些基础概念出发,读者们将学会编写自定义容器和分配器,并根据需求调整内存分配操作符的行为。根据实际需求,读者们将能够打造出更精简、更快速、更可预测 —— 同时也更安全的程序。

适读人群

本书面向具有一定编程经验,且同时喜爱高层和底层编程的开发者。若您已有泛型编程和并发编程经验,阅读体验将更加顺畅。

具体而言,本书适合以下读者:

无论您的C++背景如何,或惯用其他语言但想了解C++的独特能力,本书都将有所助益。虽然对所有开发者都有参考价值,但更适合在嵌入式系统、游戏主机等受限环境工作的开发者,或需要对资源分配机制进行精确控制的专业领域开发者。说不定 —— 还会发现其中的更多乐趣呢!

本书内容

第1章,对象、指针与引用,解析C++语言对象模型的基础概念,建立统一的技术词汇体系。

第2章,内存的风险操作,深入剖析C++中易引发问题的底层编程操作,揭示其潜在风险。

第3章,类型转换与cv限定符,探讨类型系统的强制转换工具,指导如何合理使用这些“锋利”的特性。

第4章,使用析构函数,阐述C++通过析构机制实现资源(特别是内存)管理的核心原理。

第5章,应用标准智能指针,展示现代C++如何通过类型系统实现内存责任管理。

第6章,自定义智能指针开发,教授标准库智能指针的自主实现方法,以及针对特殊场景的定制方案。

第7章,重载内存分配操作符,详解自定义内存分配操作符的多重实现方式及其优势。

第8章,实现简易的内存泄漏检测器,运用所学技能开发对用户代码透明的内存泄漏检测工具。

第9章,特殊内存分配机制,探索标准内存分配操作符的特殊应用场景,包括非抛出版本与特殊内存处理。

第10章,基于内存池的优化策略,利用领域知识实现更快速、更确定性的内存管理方案。

第11章,延迟回收机制,研究在程序执行特定时刻自动回收动态分配对象的技术。

第12章,显式内存管理通用容器,探讨自主管理内存的高效泛型容器实现,及其异常安全与复杂度权衡。

第13章,隐式内存管理通用容器,对比分析改用智能指针实现容器带来的影响。

第14章,支持分配器的通用容器,演示如何通过分配器(涵盖C++11前后及PMR分配器)定制容器内存管理。

第15章,内存特性展望,展望C++26/29中即将到来的内存管理相关特性。

附录,必备知识,提供提升阅读效果的技术背景资料,供随时查阅。

如何阅读

您需要一款支持至少C++20标准(推荐C++23)的现代C++编译器。

本书除编译器外无需其他工具,但最好使用您喜爱的代码编辑器,并随时实践书中示例。我们始终秉持可移植性与安全性的原则,严格遵循标准C++规范。极少数涉及非可移植代码的示例均会进行明确的标注。

所有代码示例均通过三大主流编译器测试验证。本书GitHub仓库中的每个示例文件都包含:

  1. 完整可运行的源码
  2. 注释中附带的在线编译器链接(可直接修改调试)

如果正在使用本书的数字版本,我们建议您自己输入代码或通过GitHub库访问代码(下一节提供链接),将避免复制和粘贴代码。

愿这些示例能成为您探索之旅的启明灯,期待您从中获得启发与乐趣。

下载源码

您可以从 GitHub 下载本书的示例代码文件 https://github.com/PacktPublishing/C-Plus-Plus-Memory-Management。如果代码有更新,它将在 GitHub 存储库中更新。

还有丰富的书籍和视频目录中的其他代码包,可在 https://github.com/PacktPublishing/ 上找到。快来看看吧!