【C++內存管理】18_總結_從最基礎到最複雜

整理於侯捷老師 《C++內存管理機制-從平地到萬丈高樓》 視頻內容git

文檔

《C++內存管理機制-從平地到萬丈高樓》pdf(來源於網絡,十分感謝)程序員

測試環境
  • ubuntu-18.4.3
  • Qt 5.13.1
  • Dev 5.11
其餘說明

免費視頻來源於b站,可自行搜索,C++內存管理機制-從平地到萬丈高樓github

課程簡介

內存是電腦中的「腦」嗎?CPU纔是腦,CPU纔是計算機中的三魂六魄。但若沒有內存,一切只存在於虛無縹緲間,等同於不存在。express

內存曾經是寶貴也最昂貴的周邊資源,現代程序員沒法想象 Dos 時代對內存的錙銖必較。ubuntu

俱往矣,且看今朝。咱們(彷佛)有用不完的便宜內存。但表象之下是操做系統和標準庫作了大量工做。而若是你開發內存高耗軟件,或處於內存受限環境下(例如嵌入式系統),就有必要深入瞭解操做系統和標準庫爲你所做的內存寸管理,甚至須要自行管理內存。網絡

課程分爲6講:數據結構

第一講:Primitives

C++ 語言中於內存相關的全部基礎組件(constructs),包括 malloc/free, new/delete, operator new/operator delete, placement new/placement delete, 我將探討他們的意義、運用方式和重載方式。並以此開發一個小型內存池(memory pool)。ide

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 分配器

[以上章節在博客中進行了部分合並整理]
相關文章
相關標籤/搜索