原生記憶體有幾種不同的分配方式,Text 、Static、Global、Stack、Heap

Text

機械代碼會儲存到Text等待電腦處理這些指令,直到程式結束運行才會被釋放。

Static

固定記憶體,儲存的東西直到程式結束運行才會被釋放。

Global

跟Static一樣,但可以修改內容。

Stack

在C默認的分配方式,在函數執行完後自動釋放,速度快,但是缺點是沒有其他釋放方式,有容量限制。

Stack overflow

是指Stack的容量超出了限制範圍,這樣程式會自動退出,一般發生的原因為Recursion。C語言當中Recursion會一直將記憶分配到Stack,由於在執行到底為止記憶都不會釋放,所以很多時候Recursion會導致Stack overflow,也是因為這樣,一般不推薦使用Recursion。

Heap

在一些GC語言的默認分配方式,在C需要通過malloc函數定義大小後獲得指標,就可以任意使用該指標,在函數執行完後依然存在,所以如果你在你的函數將資料分配到了heap,將需要自行釋放。

Memory Management vs Garbage Collection

接下來將以C作為Memory Management的例子和python作為garbage collection的例子。

Memory Management

指的是用戶需要自行管理記憶體的程式語言,一般為系統語言或者中階語言,代表語言C,C++,Rust,Zig。

優點