小議內存管理的效率——棧與堆的效率分析

棧上的內存是系統自動分配的,壓棧和出棧都有相應的指令操作,效率較高,而且分配的內存是連續的,不會產生內存碎片。而堆上的內存需要人爲創建,當申請或釋放一塊內存時,系統需要根據一定的算法在堆空間上尋找合適的內存堆空間,同時修改維護堆空閒空間的鏈表,然後返回地址給程序,效率比較低,而且容易產生碎片。特別是連續創建和刪除佔用內存較小的數據或對象時,很容易產生內存碎片。此外,在堆上分配內存容易引起內存缺頁,因爲當程序執行時,當前棧幀空間所在的內存頁肯定在物理內存中,因此程序代碼對其中變量的存取不會引起缺頁,相反,從堆中生成的對象,只有指向它的指針式在棧上,而對象本身在堆中,堆一般來說不可能都在物理內存中,即使兩個相鄰生成的對象在堆內存位置上也可能相隔甚遠,當訪問這兩個對象時可能引起兩次缺頁。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章