malloc函數的工作機制與使用方法

malloc函數的工作機制  

malloc函數的實質體現在,它有一個將可用的內存塊連接爲一個長長的列表的所謂空閒鏈表。調用malloc函數時,它沿連接表尋找一個大到足以滿足用戶請求所需要的內存塊。然後,將該內存塊一分爲二(一塊的大小與用戶請求的大小相等,另一塊的大小就是剩下的字節)。接下來,將分配給用戶的那塊內存傳給用戶,並將剩下的那塊(如果有的話)返回到連接表上。調用free函數時,它將用戶釋放的內存塊連接到空閒鏈上。到最後,空閒鏈會被切成很多的小內存片段,如果這時用戶申請一個大的內存片段,那麼空閒鏈上可能沒有可以滿足用戶要求的片段了。於是,malloc函數請求延時,並開始在空閒鏈上翻箱倒櫃地檢查各內存片段,對它們進行整理,將相鄰的小空閒塊合併成較大的內存塊。

malloc函數的使用方法

函數聲明   void *malloc(int size);

說明:malloc 向系統申請分配指定size個字節的內存空間。返回類型是 void* 類型。void* 表示未確定類型的指針。C,C++規定,void* 類型可以強制轉換爲任何其它類型的指針。
返回值:如果分配成功則返回指向被分配內存的指針,否則返回空指針NULL。當內存不再使用時,應使用free()函數將內存塊釋放。

例如:如果想申請100個整型的內存空間,即 array=(int *)malloc(100*sizeof(int))

如果想申請100個字符型的內存空間,即array=(char*)malloc(100*sizeof(char)),以此類推。

下面是一個應用例子:

  1.     #include<stdio.h>  
  2.  
  3.    
  4.   #include<stdlib.h>  
  5.  
  6.    
  7.   int main()  
  8.  
  9.         {  
  10.  
  11.    
  12.   int i,j;  
  13.  
  14.    
  15.   int *array=NULL;  
  16.  
  17.    
  18.   scanf("%d",&i);  
  19.  
  20.    
  21.   array=(int*)malloc(i*sizeof(int)); //申請i個整型內存空間  
  22.  
  23.    
  24.   for(j=0;j<i;j++)  
  25.  
  26.    
  27.   scanf("%d",&array[j]); //輸入i個整型變量  
  28.  
  29.    
  30.   for(j=0;j<i;j++)  
  31.  
  32.    
  33.   printf("%d\n",array[j]); //打印這個鏈表中的內容  
  34.  
  35.    
  36.   free(array); //釋放內存空間  
  37.  
  38.    
  39.   array=NULL;  
  40.  
  41.    
  42.   return 0;  
  43.  
  44.    
  45.   }  
  46.  
 

本文主要參閱malloc百度百科的內容,出處http://baike.baidu.com/view/736228.htm

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