記憶體分配函式分類

2021-05-22 20:20:34 字數 929 閱讀 8734

4種用於記憶體分配的

api函式。虛擬

virtual

函式用於分配和管理大數量的記憶體,堆函式

heap

用於小數量記憶體,全域性函式

global

及區域性函式

local

用於小數量記憶體分配,這兩類函式是為了實現與

16位系統相容而提供的。

win32 api

仍然維護全域性以及區域性的堆函式,但是它們都是從區域性的

2gb中分配記憶體。這些堆對於程序而言都是區域性的,不能被其他程序訪問。

當乙個程式需要分配乙個至少幾

kb快取時,使用

virtualalloc

函式獲得記憶體塊。它以

4kb為單位獲取記憶體,分配的記憶體以

4kb來對齊。當程式需要為小物件,陣列或者結構分配記憶體時,呼叫

heapalloc

函式更合適。將

virtualalloc

函式用於對小資料結構的訪問會造成記憶體資源的浪費。

每個程序都有乙個預設堆,但是為了提高效率和便於管理,程式也可以分配額外的堆。每個堆都有自己的控制代碼,呼叫

getprocessheap

函式獲得預設堆的控制代碼。

程序中的執行緒可以訪問程序中的預設堆,

win32

記憶體管理對堆的訪問是序列的。當乙個執行緒執行乙個堆函式時,其他執行緒對記憶體的請求就會被掛起直到函式結束。這樣會給程式帶來很小的延遲。如果乙個執行緒需要訪問一些堆並且不想與其他執行緒分享這個堆,那麼為執行緒分配私有堆

private heap

動態鏈結庫在預設情況下不擁有自己的堆,它與呼叫它的程序共享堆,

dll可以分配自己的私有堆並使用它。

當程式使用完堆以後一定要釋放堆。否則會產生記憶體洩漏

memory leak

。乙個規則就是,誰分配誰釋放。

用calloc 函式分配記憶體

用calloc 函式分配記憶體 calloc函式原型 void calloc size t num elements,size t element size 在標頭檔案中宣告的calloc 函式與malloc 函式相比有兩個優點。第一,它把記憶體分配為給定大小的陣列,第二,它初始化了所分配的記憶體,...

C 通過呼叫函式分配記憶體

1 以返回值方式返回 把動態分配的儲存位置位址,賦值給指標型別返回值 不同於被呼叫函式的自動變數位址 2 以形參形式返回 二級指標型別做形參 1 include 2 include 3 4 void fun int p 7 8 int main 段錯誤 1 include 2 include 3 4...

C 通過呼叫函式分配記憶體

1 以返回值方式返回 把動態分配的儲存位置位址,賦值給指標型別返回值 不同於被呼叫函式的自動變數位址 2 以形參形式返回 二級指標型別做形參 1 include 2 include 3 4 void fun int p 7 8 int main 段錯誤 1 include 2 include 3 4...