天天看點

棧空間配置設定

記憶體分堆和棧,堆是動态配置設定的,new,malloc等都是在堆上配置設定記憶體,需要手工回收或平台回收。棧用于配置設定局部變量、方法參數、傳回位址,方法運作結束後自動回收。

對于靜态類型語言,在編譯期就能知道這個方法有哪些局部變量、參數,占用的記憶體大小也是确定的,是以可以直接在棧上配置設定,這種叫做棧的靜态配置設定。對于python,javascript這種動态資料類型(python和javascript是一切皆對象語言),在程式運作之前是不能知道局部變量、參數占用多少位元組的,是以局部變量和參數可能都是在堆上配置設定的(這個不确定,猜測)。

對于棧的靜态配置設定,如下面代碼(java):

在壓棧的時候,a比b先,是以b是棧頂,這個時候如果按資料結構中的想讀取a隻能通過彈棧是不行的,這個時候知道棧頂指針和偏移量,可以算出a的位址,通過位址就能直接讀取a了,并不是說要彈棧,參考:[url]http://blog.csdn.net/chenlycly/article/details/37912683[/url]

另外Q群大牛推薦看一本書:CSAPP(Computer System: A Programmer Perspective)。