整理於侯捷老師 《C++內存管理機制-從平地到萬丈高樓》 視頻內容git
文檔
《C++內存管理機制-從平地到萬丈高樓》pdf(來源於網絡,十分感謝)程序員
測試環境
其餘說明
免費視頻來源於b站,可自行搜索,C++內存管理機制-從平地到萬丈高樓github
內存是電腦中的「腦」嗎?CPU纔是腦,CPU纔是計算機中的三魂六魄。但若沒有內存,一切只存在於虛無縹緲間,等同於不存在。express
內存曾經是寶貴也最昂貴的周邊資源,現代程序員沒法想象 Dos 時代對內存的錙銖必較。ubuntu
俱往矣,且看今朝。咱們(彷佛)有用不完的便宜內存。但表象之下是操做系統和標準庫作了大量工做。而若是你開發內存高耗軟件,或處於內存受限環境下(例如嵌入式系統),就有必要深入瞭解操做系統和標準庫爲你所做的內存寸管理,甚至須要自行管理內存。網絡
課程分爲6講:數據結構
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(第五版) 雜項討論 [以上章節在博客中進行了部分合並整理]
標準庫的興起,意味着咱們能夠擺脫內存管理的反覆瑣碎,直接使用容器。可是容器背後的分配器(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 是全部內存管理手段的最後一里;經過它才和操做系統搭上線。固然你也能夠直接調用 system API, 但不建議。所以理解 malloc/free 的內部管理至爲重要。我將以 Visual C++ 的 CRT (C RunTime Library)所帶的 malloc/free 源代碼爲基礎,深度探索這最基礎最關鍵的內存分配於釋放函數。佈局
VC6 和 VC10 的 malloc 比較 Small Block Heap(SBH) 初始化 SBH 行爲分析 - 區塊大小之計算 SBH 行爲分析 - 數據結構 SBH 行爲分析 - 分配之詳細圖解 SBH 行爲分析 - 分配 + 釋放之連續動做圖解 SBH 反省 [以上章節在博客中進行了部分合並整理]
即便知名如 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 分配器 [以上章節在博客中進行了部分合並整理]