linux C 記憶體管理方式之半動態

2022-07-18 04:21:09 字數 488 閱讀 3592

看到半動態申請記憶體,第一反應這是什麼鬼?

實際上半動態記憶體申請很容易理解,在gnu c中使用alloca函式來實現

#include void *alloca (size_t size)

alloca函式可以像malloc一樣動態申請記憶體(注意所申請的記憶體位置在呼叫函式的棧裡面,頁因此在呼叫函式結束後自動釋放)

好處是顯而易見的:既可以自由得申請空間,又不需要手動釋放記憶體。

壞處是:發生錯誤時,無法得到乙個清晰得錯誤訊息。還有就是,非gnu系統不支援alloca,這是乙個bsd擴充套件,相容性不好。(其他平台可能會使用c寫乙個模擬得alloca,但效率不好)

在gnu c中得大部分情況下,你可以使用可變大小的陣列代替alloca。

區別:  可變大小的陣列只在陣列名所在的區域有效,超過則釋放。alloca 申請的空間則一直保留的函式結束。

alloca可以在迴圈體中使用,每次迴圈都逐步增加記憶體空間。而可變大小的陣列不行。

記憶體管理方式

記憶體管理方式 塊 段 頁 段頁 頁式管理 頁式管理的基本原理將各程序的虛擬空間劃分成若干個長度相等的頁 page 頁式管理把記憶體空間按頁的大小劃分成片或者頁面 page frame 然後把頁式虛擬位址與記憶體位址建立一一對應頁表,並用相應的硬體位址變換機構,來解決離散位址變換問題。頁式管理採用請...

WINDOWS記憶體管理方式

windows記憶體管理方式主要分為 段式管理 頁式管理 段頁式管理。頁式管理 頁式管理的基本原理將各程序的虛擬空間劃分成若干個長度相等的頁 page 頁式管理把記憶體空間按頁的大小劃分成片或者頁面 page frame 然後把頁式虛擬位址與記憶體位址建立一一對應頁表,並用相應的硬體位址變換機構,來...

autoRelease記憶體管理方式

autorelease實際是把release的呼叫延遲了,對於每乙個autorelease,系統只是把該object放入了當 前的autorelease pool中,當該pool被釋放時,該pool中的所有object會被呼叫release。autorelease pool釋放條件 1,手動,2,引...