The Tax of Memory Abstraction [2026-02-02 20:03]
比如,現在你在一個userspace的C程式上要一段記憶體, 你至少得經過三層抽象:
1. 首先malloc會用一坨迷之策略在一個虛擬的連續地址空間給你分配一段地址,你去訪問這個地址,可能會觸發缺頁中斷,
2. 然後作業系統通過另一坨迷之策略給你找一個可用的物理內存頁,然後改你的頁表做虛存地址到物理地址映射。
3. 然後!你的指令到了CPU,MMU才根據頁表把你指令中的地址轉成物理地址去訪問記憶體。
雖然經過無數先烈的重重優化,這裡的overhead還可以輕鬆占到整個runtime的10%以上,當然更恐怖的是你永遠都說不準這個overhead。
但是為什麼要搞這麼複雜?是因為要在多道程式環境給每個程式相互隔離的空間,不管怎麼亂搞都不會搞掛別人。
要連續地址空間是因為FORTRAN這些古老的語言假定連續內存空間,很多環境下甚至沒有動態記憶體分配這麼先進的東西。
然而現在就算我們就算寫C很多時候也都依賴malloc對連續空間的假定沒那麼強(stack還是要的,越界後果還是嚴重的)
而更多的時候我們在這層層抽象之上,再跑了一個VM, 然後用內建記憶體安全性質的語言。
我不接受!!!咕咕嘎嘎!!!!!!