malloc實現原理,我ralloc的使用

2021-07-24 18:06:42 字數 2024 閱讀 7873

1.malloc()是

c語言中動態

儲存管理

的一組標準庫函式之一。其作用是在記憶體的動態儲存區中分配乙個長度為size的連續空間。其引數是乙個無符號整形數,

返回值是乙個指向所分配的連續儲存域的起始位址的指標。 

動態記憶體分配

就 是指在程式執行的過程中動態地分配或者**儲存空間的分配記憶體的方法。動態記憶體分配不像陣列等靜態記憶體分配方法那樣需要預先分配儲存空間,而是由系統根據 程式的需要即時分配,且分配的大小就是程式要求的大小。

2. 函式說明 

c語言的動態儲存管理由一組標準庫函式實現,其原型在標準檔案裡描述,需要用這些功能時應包含這個檔案。與動態儲存分 配有關的函式共有四個,其中就包括儲存分配函式malloc()。函式原型是:void *malloc (size_t n);這裡的size_t是標準庫里定義的乙個型別,它是乙個無符號整型。這個整型能夠滿足所有對儲存塊大小描述的需要,具體相當於哪個整型由具體的c系 統確定。malloc的返回值為(void *)型別(這是通用指標的乙個重要用途),它分配一片能存放大小為n的資料的儲存塊,返回對應的指標值;如果不能滿足申請(找不到能滿足要求的儲存塊)就 返回null。在使用時,應該把malloc的返回值轉換到特定指標型別,賦給乙個指標。

3.malloc()在

作業系統

中的實現 

在 c 程式中,多次使用malloc () 和 free()。不過,您可能沒有用一些時間去思考它們在您的作業系統中是如何實現的。本節將向您展示 malloc 和 free 的乙個最簡化實現的**,來幫助說明管理記憶體時都涉及到了哪些事情。 

在大部分作業系統中,記憶體分配由以下兩個簡單的函式來處理: 

void *malloc (long numbytes):該函式負責分配 numbytes 大小的記憶體,並返回指向第乙個位元組的指標。 

void free(void *firstbyte):如果給定乙個由先前的 malloc 返回的指標,那麼該函式會將分配的空間歸還給程序的「空閒空間」。 

malloc_init 將是初始化記憶體分配程式的函式。它要完成以下三件事:將分配程式標識為已經初始化,找到系統中最後乙個有效

記憶體位址

,然後建立起指向我們管理的記憶體的指標。這三個變數都是

全域性變數

: 清單 1. 我們的簡單分配程式的全域性變數 

int has_initialized = 0; 

void *managed_memory_start; 

void *last_valid_address

.ralloc

(1)函式原型

void *ralloc(void *mem_address,unsigned int newsize);

(2)功能

先判斷當前的指標是否有足夠的連續空間,如果有,擴大mem_address指向的位址,並且將mem_address返回,如果空間不夠, 先按照newsize指定的大小分配空間,將原有

資料從頭到尾拷貝到新分配的記憶體區域,而後釋放原來mem_address所指記憶體區域(注意:原來指標是自動釋放,不需要使用free),同時返回新分配的記憶體區域的首位址。即

重新分配儲存器塊的位址。

如果重新分配成功則返回指向被分配記憶體的指標,否則返回空指標null。

(3)同樣的當記憶體不在使用時,要用使用free函式將記憶體釋放。

(4)使用ralloc函式的注意事項

(1)ralloc失敗的時候,返回null。

(2)ralloc失敗的時候,原來的記憶體不改變,不會釋放也不會移動。

(3)假如原來的記憶體後面還有足夠多剩餘記憶體的話,ralloc的記憶體=原來的記憶體+剩餘記憶體,ralloc還是返回原來記憶體的位址;假如原來的記憶體後面沒有足夠多剩餘記憶體的話,ralloc

將申請新的記憶體,然後把原來的記憶體資料拷貝到新記憶體裡,原來的記憶體將被free掉,ralloc返回新記憶體的位址。

(4)如果size為0,效果等同於free()。

(5)傳遞給ralloc的指標必須是先前通過malloc(), calloc(),或ralloc()分配的

(6)傳遞給ralloc的指標可以為空,等同於malloc。

malloc實現原理

malloc 是c語言中動態儲存管理 的一組標準庫函式之一。其作用是在記憶體的動態儲存區中分配乙個長度為size的連續空間。其引數是乙個無符號整形數,返回值 是乙個指向所分配的連續儲存域的起始位址的指標。動態記憶體分配 就 是指在程式執行的過程中動態地分配或者 儲存空間的分配記憶體的方法。動態記憶體...

malloc實現原理簡介

malloc 是c語言中動態儲存管理 的一組標準庫函式之一。其作用是在記憶體的動態儲存區中分配乙個長度為size的連續空間。其引數是乙個無符號整形數,返回值 是乙個指向所分配的連續儲存域的起始位址的指標。動態記憶體分配 就 是指在程式執行的過程中動態地分配或者 儲存空間的分配記憶體的方法。動態記憶體...

malloc的實現原理

malloc 是 c語言中動態 儲存管理 的一組標準庫函式之一。其作用是在記憶體的動態儲存區中分配乙個長度為size的連續空間。其引數是乙個無符號整形數,返回值是乙個指向所分配的連續儲存域的起始位址的指標。動態記憶體分配 就 是指在程式執行的過程中動態地分配或者 儲存空間的分配記憶體的方法。動態記憶...