关于c++:C内存管理18总结从最基础到最复杂

8次阅读

共计 2124 个字符,预计需要花费 6 分钟才能阅读完成。

整顿于侯捷老师《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 分配器

[以上章节在博客中进行了局部合并整顿]
正文完
 0