malloc函数具体解释
一、原型:extern void *malloc(unsigned int num_bytes);
頭文件:#include <malloc.h> 或 #include <alloc.h> (注意:alloc.h 與 malloc.h 的內(nèi)容是全然一致的。)
功能:分配長度為num_bytes字節(jié)的內(nèi)存塊
說明:假設(shè)分配成功則返回指向被分配內(nèi)存的指針,否則返回空指針NULL。
當(dāng)內(nèi)存不再使用時,應(yīng)使用free()函數(shù)將內(nèi)存塊釋放。
?
舉例:
#include<stdio.h> #include<malloc.h> int main() { char *p; p=(char *)malloc(100); if(p) printf("Memory Allocated at: %x/n",p); else printf("Not Enough Memory!/n"); free(p); return 0; }
?
?
二、函數(shù)聲明(函數(shù)原型):
void *malloc(int size);
說明:malloc 向系統(tǒng)申請分配指定size個字節(jié)的內(nèi)存空間。返回類型是 void* 類型。void* 表示未確定類型的指針。C,C++規(guī)定,void* 類型能夠強(qiáng)制轉(zhuǎn)換為不論什么其他類型的指針。這個在MSDN上能夠找到相關(guān)的解釋,詳細(xì)內(nèi)容例如以下:
?????
malloc returns a void pointer to the allocated space, or NULL if there is insufficient memory available. To return a pointer to a type other than void, use a type cast on the return value. The storage space pointed to by the return value is guaranteed to be suitably aligned for storage of any type of object. If size is 0, malloc allocates a zero-length item in the heap and returns a valid pointer to that item. Always check the return from malloc, even if the amount of memory requested is small.
三、malloc與new的不同點(diǎn)
從函數(shù)聲明上能夠看出。malloc 和 new 至少有兩個不同: new 返回指定類型的指針,而且能夠自己主動計算所須要大小。比方:
????? int *p;
p = new int; //返回類型為int* 類型(整數(shù)型指針),分配大小為 sizeof(int);
或:
int* parr;
parr = new int [100]; //返回類型為 int* 類型(整數(shù)型指針),分配大小為 sizeof(int) * 100;
?? 而 malloc 則必須由我們計算要字節(jié)數(shù),而且在返回后強(qiáng)行轉(zhuǎn)換為實際類型的指針。
?? int* p;
p = (int *) malloc (sizeof(int));
?
第一、malloc 函數(shù)返回的是 void * 類型,假設(shè)你寫成:p = malloc (sizeof(int)); 則程序無法通過編譯,報錯:“不能將 void* 賦值給 int * 類型變量”。所以必須通過 (int *) 來將強(qiáng)制轉(zhuǎn)換。
第二、函數(shù)的實參為 sizeof(int) ,用于指明一個整型數(shù)據(jù)須要的大小。假設(shè)你寫成:
int* p = (int *) malloc (1);
代碼也能通過編譯,但其實僅僅分配了1個字節(jié)大小的內(nèi)存空間,當(dāng)你往里頭存入一個整數(shù),就會有3個字節(jié)無家可歸,而直接“住進(jìn)鄰居家”!造成的結(jié)果是后面的內(nèi)存中原有數(shù)據(jù)內(nèi)容所有被清空。
malloc 也能夠達(dá)到 new [] 的效果,申請出一段連續(xù)的內(nèi)存,方法無非是指定你所須要內(nèi)存大小。
比方想分配100個int類型的空間:
int* p = (int *) malloc ( sizeof(int) * 100 ); //分配能夠放得下100個整數(shù)的內(nèi)存空間。
另外有一點(diǎn)不能直接看出的差別是,malloc 僅僅管分配內(nèi)存,并不能對所得的內(nèi)存進(jìn)行初始化,所以得到的一片新內(nèi)存中,其值將是隨機(jī)的。
除了分配及最后釋放的方法不一樣以外,通過malloc或new得到指針,在其他操作上保持一致。
?
?總結(jié):
malloc()函數(shù)事實上就在內(nèi)存中找一片指定大小的空間,然后將這個空間的首地址范圍給一個指針變量,這里的指針變量能夠是一個單獨(dú)的指針,也能夠是一個數(shù)組的首地址,這要看malloc()函數(shù)中參數(shù)size的詳細(xì)內(nèi)容。我們這里malloc分配的內(nèi)存空間在邏輯上連續(xù)的,而在物理上能夠連續(xù)也能夠不連續(xù)。對于我們程序猿來說,我們關(guān)注的是邏輯上的連續(xù),由于操作系統(tǒng)會幫我們安排內(nèi)存分配,所以我們使用起來就能夠當(dāng)做是連續(xù)的。
總結(jié)
以上是生活随笔為你收集整理的malloc函数具体解释的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: js获取url参数值
- 下一篇: [Everyday Mathematic