程式使用的記憶體區分成

1. 「靜態區城(static)」:在程式一開始執行就會配置好(儲存全域變數、類別資訊、執行碼),在程式執行時都不會變化,直到程式結束為止都會存在的固定區域

2. 「堆疊區域(stack)」:執行緒所使用的記憶體區塊,每個執行緒擁有獨立的一個,用來控制副程式呼叫,儲存了傳給副程式的參數、區域變數還有回歸位址等資訊,運作方法為LIFO

3. 「堆積區域(heap)」:程式執行時用來動態配置使用的記憶體空間,應用程式需要記憶體空間時,會對此區域請求配置需要的容量,並且在不需要時將空間還原,所有執行緒共用,由系統提供管理功能

 

P.S. C/C++會一開始就將所有類別資訊載入,JAVA和.NET則是需要時才陸續載入,並且將各類別資訊連結起來。後者作法有overhead問題,對整體執行效能有不良影響,但優點是可以減少整體記憶體的使用量,並且較容易在程式執行階段與分散在網路另一端的程式檔連結運作的好處,確保執行時的彈性

 

P.S. 若是忘記釋放沒使用到的資料,會一直留在堆積裡,容易造成「memory leak」的問題,藉由「垃圾收集」機制,可以避免考慮此問題

 

P.S. 垃圾收集機制會自動回收在堆積區域中孤立(或是只有循環參考)的實體

 

shiuaner 發表在 痞客邦 留言(2) 人氣()