記憶體洩漏( Memory leaks ) 和迷途指標( dangling pointers )是手動記憶體管理的主要問題。 你在連結串列中刪除了父節點,卻忘了先刪除它的所有子節點ーー你的記憶體正在洩漏。 你以正確的順序刪除一個物件鏈ー但是突然你的程式崩潰了,因此你忘記了這個資源的第二個所有者,這個資源現在試圖取消參考( dereference ) 一個空指標( null-pointer )。
為了避免這些問題,大多數現代高階程式語言實現了自動記憶體管理。 你可以手動分配物件的記憶體,但是不必擔心它們的釋放: 一個特殊的程式,垃圾收集器,知道如何正確地自動釋放物件,並回收它們以供將來重複使用。
在“垃圾收集器必備基礎”課程中,我們學習了與自動記憶體管理相關的所有不同的技術和演算法,這些技術和演算法現在已經在實踐中得到了應用。
✅這門課是給誰上的?
首先,針對編譯器工程師。
在實現程式語言時,很有可能需要實現一個垃圾收集器。 即使最初定位為“記憶體安全”的語言,如 Rust,最終也實現了自動參考計數(ARC)和其它收集器。
重申一下: 在大多數現代高階程式語言中,垃圾收集器模組(或多個 GC 模組,比如 Java)現在基本上是必需的。
如果實現程式語言不是我每天的工作?
如果你不是一個編譯器工程師,那麼這個課程對你來說仍然是有趣的。 總的來說,實現垃圾收集器或記憶體管理器是一項相當高階的工程任務。 這是一個簡單的技巧: 你參與一些複雜的專案(如垃圾收集器、編譯器、直譯器等) ,在構建它時,你將學習所有不同的資料結構和演算法。 然後回到“每日程式設計” ,得到能力上的提升以成為一個更好的工程師,掌握了複雜系統的可轉移通用知識。
✅這個專案我需要熟悉 C 還是 C++ ?
也不盡然! 當然,C 和 C++ 可能是最適合原始記憶體操作的語言,並且在這裡非常適合,但是在課程中我們學習通用設計演算法,主要關注垃圾收集器和記憶體分配器的理論方面。 這意味著你可以用任何你想要的語言來實現它們。 例如,你可以在 JavaScript 中為一個虛擬 Heap 分配一個 ArrayBuffer,或者類似的在 Python、 Rust 等中分配一個 bytearray。
本課程中的大多數演算法都是用泛型虛擬碼( generic pseudo-code )描述的,因此你可以將它們移植到任何語言中。
https://softnshare.com/essentials-of-garbage-collectors/
泛型c 在 91 敏捷開發之路 Facebook 的精選貼文
這影片是【C#進階設計-從重構學會高易用性與高彈性API設計】實際上課的錄影片段,如何針對已經完成的 SequenceEqual() API 來進行重構。
這一小段影片帶到課中的幾個重點:
① 我寫程式的方式與順序,可能跟一般人很不一樣。(也可以看到,除非為了方便說明,我寫 code 是不用滑鼠的。不只是 shortcut 而已,包含移動、定位也是)
② IEqualityComparer 的目的與使用方式,何謂 Equals(), 何謂 GetHashCode(),如何調用 default 的 EqualityComparer。
③ 提取參數,讓所有呼叫端可以一次更著新的 API 作法調整。
④ GetEnumerator(), IEnumerable, IEnumerator 設計與使用
⑤ Use Base Type Where Possible,可以用基底的抽象類別或介面,就使用基底型別來提昇使用上的彈性
⑥ 泛型 (generic) 是如何被重構出來的
⑦ 如何在測試保護下,小步快跑地重構出更有彈性的 API 與實作內容。
下次課程日期在 2020/2/28~2020/3/1,課程簡介與報名:https://dotblogs.com.tw/hatelove/2019/08/19/csharp-advance-api-design-202002
※ 2020 年僅此一梯次,想一次搞懂 C# 的基礎原理、資料結構的應用場景、在測試保護下運用工具的重構套路,這是最後的機會啦。
泛型c 在 軟體廚房 Facebook 的最讚貼文
C# 泛型其條件約束無法約束有參數的建構式,這就無法在產生 instance 的時候傳參數進去,一般大都使用 Activator.CreateInstance() 來暫時解決問題,不過其實可以有效能更好的產生 instance 的方式可以選擇。
https://dotblogs.com.tw/supershowwei/2019/07/29/234607
泛型c 在 Use C++ Generic Template to write matrix class(C++泛型樣版 ... 的美食出口停車場
C++的 泛型 樣版(Generic Template)與矩陣Matrix(寫在自訂標頭檔"matrix12.h") ... <看更多>