記憶體操作函式 malloc

2021-06-25 08:44:24 字數 1383 閱讀 2301

函式 malloc:  void *malloc(size_t size);  //在記憶體塊獲取區塊。

標頭檔案 : malloc.h

返回值: 如果分配成功則返回指向被分配記憶體的指標(此儲存區中的初始值不確定),否則返回空指標null。

記憶體釋放:當記憶體不再使用時,應使用free()函式將記憶體塊釋放。函式返回的指標一定要適當對齊,使其可以用於任何資料物件。

注意:在使用上,malloc 和 new 至少有兩個不同: new 返回指定型別的指標,並且可以自動計算所需要大小。比如:

int*p;

p=new int;

//返回型別為int*型別(整數型指標),分配大小為sizeof(int);

而 malloc 則必須要由我們計算位元組數,並且在返回後強行轉換為實際型別的指標。

int*p;

p=(int*)malloc(sizeof(int)*128);

工作機制:

malloc函式的實質體現在,它有乙個將可用的記憶體塊連線為乙個長長的列表的所謂空閒鍊錶。呼叫malloc函式時,它沿連線表尋找乙個大到足以滿足使用者請求所需要的記憶體塊。

然後,將該記憶體塊一分為二(一塊的大小與使用者請求的大小相等,另一塊的大小就是剩下的位元組)。接下來,將分配給使用者的那塊記憶體傳給使用者,並將剩下的那塊(如果有的話)返回到連線表上。

呼叫free函式時,它將使用者釋放的記憶體塊連線到空閒鏈上。到最後,空閒鏈會被切成很多的小記憶體片段,如果這時使用者申請乙個大的記憶體片段,那麼空閒鏈上可能沒有可以滿足使用者要求的片段了。

於是,malloc函式請求延時,並開始在空閒鏈上翻箱倒櫃地檢查各記憶體片段,對它們進行整理,將相鄰的小空閒塊合併成較大的記憶體塊。如果無法獲得符合要求的記憶體塊,malloc函式會返回null指標,

因此在呼叫malloc動態申請記憶體塊時,一定要進行返回值的判斷。

//正常程式:

#include //標頭檔案

#include #include #includeusing namespace std;

typedef struct data_typedata;

void main()

else

free(bob);

bob=null;//釋放指標所指記憶體後,記得把指標賦值為null;

}//記憶體洩漏例項 例1: 對malloc申請之後沒有檢測返回值;

#include#include// malloc()函式被包含在malloc.h裡面

#define max 100000000

int main(void)

;int i;

for(i=0;ia[i]=(int*)malloc(max);

return 0;

}

記憶體空間 malloc函式

我好弱。我的知識還很匱乏。2020年1月7日 18 37 26 記憶體分配之malloc 函式。是在程式執行的時候進行記憶體分配的。此函式接收乙個引數 是所需的記憶體的位元組數。malloc 函式分配記憶體,不會給我們乙個類似於變數名的東西讓我們去訪問malloc 函式為我們申請的記憶體空間,而是為...

malloc函式 動態記憶體分配

malloc 向系統申請分配指定size個位元組的記憶體空間。返回型別是 void 型別。void 表示未確定型別的 指標。c,c 規定,void 型別可以 強制轉換 為任何其它型別的指標。原型 extern void malloc unsigned int num bytes 標頭檔案 在tc2....

記憶體分配malloc函式注意事項。

malloc的全稱是memory allocation,中文叫動態記憶體分配,用於向系統申請分配指定位元組的記憶體空間 原型 extern void malloc unsigned int num bytes 看原型很頭疼,來兩個例子 int p p int malloc sizeof int 12...