這塊記憶體存放程式執行時的變數及各項資料。
這塊記憶的配置,是由程式所控制的。
記憶體的配置模型可分為三種,global、stack、heap。
程式執行時的記憶體需求,依據不同類型,配置在不同記憶體中。
其中heap是從該記憶體的最高位址開始配置。
stack是從最低位址開始配置。
global
程式中的全域變數或是static變數,配置在這個區域。程式運行中,這些變數永遠存在,也就是記憶體都在使用,不會回收。
stack 堆疊/棧
生命週期可被預期的變數或是函數資料,配置在這個區域。因為可以預期,所以這些記憶體可被系統自動管理,
不再使用時,系統自動回收。
常見的資料有:
區域變數
函數的參數
函數的返回地址
後進先出原則
等整個function執行結束,整個stack都釋放了。
配置方式
stack使用是分次分配的,每分配一個稱為一個frame。
從底位址往高位址一個一個分配,
後分配的(push )進去的會先釋放。
也就是後進先出。
取出稱為pop。
也因為後進先出、一層一層疊加的特性,
所以記憶體是從低位址開始使用,較為合理。
heap 堆
程式執行時才動態產生,無法預期何時產生、數量多少、何時回收,
這些資料則配置在heap區域。
或是使用者要求,例如使用malloc函數。
這時記憶體就要由使用者自行回收,
或是由語言的Garbage Collection機制回收。
若回收不完全,就會產生out of memory的錯誤,
導致系統記憶體越用越少。
配置方式
每次配置一塊記憶體,每塊記憶體之間各自獨立。從低位址往高位址配置
href="http://http://www.ruanyifeng.com/blog/2018/01/assembly-language-primer.html">參考
沒有留言:
張貼留言