Contents
這門課程教你關於自動記憶體管理的技術
從這 2 小時的課程,你會學到
- 電腦程式自動記憶體管理背後的演算法和資料結構
- 記憶體管理歷史: 靜態,堆疊,Heap allocations
- 虛擬記憶體和記憶體佈局
- 追蹤與直接收集器的比較
- 語義( Semantic )與語法( Syntactic )垃圾的比較
- Mark-Sweep 收集器
- Mark-Compact 收集器
- 參考計數收集器
- 複製收集器
- Generational 收集器
- 平行的、增量的、併發( Concurrent )的收集器
- 三色抽象化( Tri-color abstraction )與標記
- 垃圾收集器的障礙
要求
- 基本的資料結構和演算法(樹、圖、連結串列等)
- 關於電腦記憶體的基本知識(位元組、位址、指標)
課程說明
垃圾收集器的必備基礎
記憶體洩漏( Memory leaks ) 和迷途指標( dangling pointers )是手動記憶體管理的主要問題。 你在連結串列中刪除了父節點,卻忘了先刪除它的所有子節點ーー你的記憶體正在洩漏。 你以正確的順序刪除一個物件鏈ー但是突然你的程式崩潰了,因此你忘記了這個資源的第二個所有者,這個資源現在試圖取消參考( dereference ) 一個空指標( null-pointer )。
為了避免這些問題,大多數現代高階程式語言實現了自動記憶體管理。 你可以手動分配物件的記憶體,但是不必擔心它們的釋放: 一個特殊的程式,垃圾收集器,知道如何正確地自動釋放物件,並回收它們以供將來重複使用。
在“垃圾收集器必備基礎”課程中,我們學習了與自動記憶體管理相關的所有不同的技術和演算法,這些技術和演算法現在已經在實踐中得到了應用。
這門課是給誰上的?
首先,針對編譯器工程師。
在實現程式語言時,很有可能需要實現一個垃圾收集器。 即使最初定位為“記憶體安全”的語言,如 Rust,最終也實現了自動參考計數(ARC)和其它收集器。
重申一下: 在大多數現代高階程式語言中,垃圾收集器模組(或多個 GC 模組,比如 Java)現在基本上是必需的。
如果實現程式語言不是我每天的工作?
如果你不是一個編譯器工程師,那麼這個課程對你來說仍然是有趣的。 總的來說,實現垃圾收集器或記憶體管理器是一項相當高階的工程任務。 這是一個簡單的技巧: 你參與一些複雜的專案(如垃圾收集器、編譯器、直譯器等) ,在構建它時,你將學習所有不同的資料結構和演算法。 然後回到“每日程式設計” ,得到能力上的提升以成為一個更好的工程師,掌握了複雜系統的可轉移通用知識。
這個專案我需要熟悉 C 還是 C++ ?
也不盡然! 當然,C 和 C++ 可能是最適合原始記憶體操作的語言,並且在這裡非常適合,但是在課程中我們學習通用設計演算法,主要關注垃圾收集器和記憶體分配器的理論方面。 這意味著你可以用任何你想要的語言來實現它們。 例如,你可以在 JavaScript 中為一個虛擬 Heap 分配一個 ArrayBuffer,或者類似的在 Python、 Rust 等中分配一個 bytearray。
本課程中的大多數演算法都是用泛型虛擬碼( generic pseudo-code )描述的,因此你可以將它們移植到任何語言中。
這門課的具體內容是什麼?
這些講座的主要內容是:
- 簡明扼要,直奔主題。 每個講座是自給自足的,簡潔,並描述資訊直接相關的主題,沒有不相關的材料或談話分散注意力。
- 動畫簡報結合現場編輯筆記。 這使得理解主題更加容易,並顯示如何(以及何時)連結物件結構。 靜態的幻燈片根本不適用於複雜的內容。
閱讀材料
作為本課程的進一步閱讀和補充文獻,推薦以下書籍:
The Compiler Design Handbook: Optimizations and Machine Code Generation, Second Edition
目標受眾
- 編譯器工程師
- 所有好奇的工程師,願意實現一個複雜的專案來學習不同的記憶體管理演算法(通用知識可以轉移到其他系統)
講師簡介
Dmitry Soshnikov 軟體工程師和講師 ( 更多講師線上課程介紹 )
Dmitry Soshnikov 是一名軟體工程師,也是一名有不同於電腦科學主題的講師。
他對教育充滿熱情,注重高品質的教育內容: 簡明扼要,並使用現場編輯筆記的動畫講座。
你會從 Dimitry 的課程學到:
- 編譯器和直譯器: 建立一個程式語言
- 垃圾收集器(自動記憶體管理)
- 程式設計語言理論
- Automata Theory: Building a RegExp machine
- 自動機理論: 建立一個 RegExp 機器
- 解析器理論: 實現一個編譯器編譯程式
英文字幕:有
- 想要了解如何將英文字幕自動翻譯成中文? 請參考這篇 How-To
報名參加課程

也許你會有興趣
- C 語言系統程式專案-從頭開始寫一個記憶體洩漏檢測器
- 狀態機( State machines ) 和自動機 ( Automata ) : 建立一個 RegExp 機器
- ★英語學習地圖 – 練好英文是最大的學習槓桿
- 如何找工作學習地圖 – 找工作不要靠運氣!
你必須登入才能發表留言。