我前陣子在玩暗黑破壞神三這款遊戲時候,注意到被打倒的怪物們「瞬間」人間蒸發!遊戲這種「屍骨無存」方式處理被打倒的怪物們就是記憶體管理機制,是程式設計的時候一定會被拿出來討論的一門技術。
CPU <=- reading from and writing to -=> RAM
電腦的運作是中央處理器 CPU 負責計算,資料就放在記憶體 RAM 裡面。程式的運作就是不斷讀取記憶體、計算數據再寫入記憶體的過程。但我們都知道每一台電腦的記憶體不管配備幾十、幾百個 GB 記憶體都還是有上限的。你可以想像記憶體就像一間超大型百貨公司,電腦的作業系統 OS,例如:Windows,就是樓管,它會負責提供記憶體空間給進駐展櫃的程式們使用,並確保程式間的記憶體空間是不會互相干擾。遊戲程式拿到的記憶體空間你可以想像成一個有很多格子的盒子,用來存放所有被創造出來的元件,包含我們的角色、環境與成群的怪物們的數據。因此遊戲的畫面越精緻、產生的物件跟怪物數量越多的話,格子被填滿的速度越快。遊戲為了有源源不絕的怪物出現,就必須處理被打倒的怪物們,「盡快」把佔用的記憶體空間回收回來,否則盒子就會很快爆滿,導致記憶體耗盡的錯誤,造成「當機」、「閃退」、「不斷重啟」等不穩定的結果,好不容易打到的進度就沒了。
近幾年發展的程式語言,像是 Java, C# 等,都有配備很好 GC 垃圾回收的機制,已經不太需要程式設計師自己手動管理記憶體,程式穩定度提升。有垃圾處理機制不代表問題消失,還是要幫自己建立良好的程式寫作習慣,解構用不到的物件讓垃圾處理機制發揮作用才是更好的作法。