整理于侯捷老师 《C++内存管理机制-从平地到万丈高楼》 视频内容
文档
《C++内存管理机制-从平地到万丈高楼》pdf(来源于网络,十分感谢)
测试环境
- ubuntu-18.4.3
- Qt 5.13.1
- Dev 5.11
其他说明
免费视频来源于b站,可自行搜索,C++内存管理机制-从平地到万丈高楼
课程简介
内存是电脑中的“脑”吗?CPU才是脑,CPU才是计算机中的三魂六魄。但若没有内存,一切只存在于虚无缥缈间,等同于不存在。
内存曾经是宝贵也最昂贵的周边资源,现代程序员无法想象 Dos 时代对内存的锱铢必较。
俱往矣,且看今朝。我们(似乎)有用不完的便宜内存。但表象之下是操作系统和标准库做了大量工作。而如果你开发内存高耗软件,或处于内存受限环境下(例如嵌入式系统),就有必要深刻了解操作系统和标准库为你所作的内存寸管理,甚至需要自行管理内存。
课程分为6讲:
第一讲:Primitives
C++ 语言中于内存相关的所有基础组件(constructs),包括 malloc/free, new/delete, operator new/operator delete, placement new/placement delete, 我将探讨他们的意义、运用方式和重载方式。并以此开发一个小型内存池(memory pool)。
Overview
内存分配的每个层面
四个基本层面的用法
基本构件之一 new/delete expressions
基本构件之二 array new/delete
基本构件之三 placement new/delete
基本构建之分配流程
基本构建之重载
Per-class allocator
Per-class allocator
Common static allocator (第三版)
Macro allocator(第四版)
GNU C++ allocator(第五版)
杂项讨论
[以上章节在博客中进行了部分合并整理]
第二讲:std::allocator
标准库的兴起,意味着我们可以摆脱内存管理的反复琐碎,直接使用容器。但是容器背后的分配器(allocator)攸关容器的速度能效和空间能效。我将比较 Visual C++, Borland C++, GUN C++ 标准库中的 allocator, 并深入探讨其中最精巧的 GNU C++ allocator 的设计。
内存块布局
VC6 allocator
BC5 allocator
GNU allocator
GNU allocator 行为剖析
GNU allocator 源码剖析
GNU allocator 讨论
GNU allocator 监视
GNU allocator 移植到 C 语言
[以上章节在博客中进行了部分合并整理]
第三讲:malloc/free
malloc/free 是所有内存管理手段的最后一里;通过它才和操作系统搭上线。当然你也可以直接调用 system API, 但不建议。因此理解 malloc/free 的内部管理至为重要。我将以 Visual C++ 的 CRT (C RunTime Library)所带的 malloc/free 源代码为基础,深度探索这最基础最关键的内存分配于释放函数。
VC6 和 VC10 的 malloc 比较
Small Block Heap(SBH) 初始化
SBH 行为分析 - 区块大小之计算
SBH 行为分析 - 数据结构
SBH 行为分析 - 分配之详细图解
SBH 行为分析 - 分配 + 释放之连续动作图解
SBH 检讨
[以上章节在博客中进行了部分合并整理]
第四讲:loki::allocator
即使知名如 GNU C++ pool allocator, 也有其小缺陷。Loki(一套作风前沿的程序库)的 allocator 设计精简功能完整几无缺点,很值得我们深究。
上中下三个 classes 分析
Loki::allocator 行为图解
class Chunk 分析
class FixedAllocator 分析
Loki::allocator 检讨
[以上章节在博客中进行了部分合并整理]
第五讲:其它主题
除了 std::allocator, GNU C++ 还带不少 allocators, 他们不是标准库的一部分,可视为标准库的扩充。我将探讨这些扩充的 allocator, 特别是 bitmap_allocator。
我们谈的不只是应用,还深入设计原理与实现手法。在理解了这么多底层(Windows Heap, CRT malloc/free, C++ new/delete, C++ allocator)之后,也许你终于焕然大悟,再不需自行管理内存了;或也许你终于有能力想象,该在何处以何种方式加强内存管理。
你将获得整个 video 课程的完整讲义(也就是 video 呈现的每一张投影片书面),和一个完整程序包括代码文件 .cpp 和可执行文件.exe。你可以在视频过程中随时停格 -- 这的确很需要时间和脑力,却能令你脑洞大开。
GNU C++ 对 allocator 的描述
VS2013 标准分配与 new_allocator
G4.9 标准分配器与 new_allocator
G4.9 malloc_allocator
G4.9 array_allocator
G4.9 debug_allocator
G4.9 __pool_alloc
G4.9 bitmap_allocator
G4.9 使用 G4.9 分配器
[以上章节在博客中进行了部分合并整理]
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。