malloc函数具体解释
一、原型:extern void *malloc(unsigned int num_bytes);
頭文件:#include <malloc.h> 或 #include <alloc.h> (注意:alloc.h 與 malloc.h 的內容是全然一致的。)
功能:分配長度為num_bytes字節的內存塊
說明:假設分配成功則返回指向被分配內存的指針,否則返回空指針NULL。
當內存不再使用時,應使用free()函數將內存塊釋放。
?
舉例:
#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; }
?
?
二、函數聲明(函數原型):
void *malloc(int size);
說明:malloc 向系統申請分配指定size個字節的內存空間。返回類型是 void* 類型。void* 表示未確定類型的指針。C,C++規定,void* 類型能夠強制轉換為不論什么其他類型的指針。這個在MSDN上能夠找到相關的解釋,詳細內容例如以下:
?????
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的不同點
從函數聲明上能夠看出。malloc 和 new 至少有兩個不同: new 返回指定類型的指針,而且能夠自己主動計算所須要大小。比方:
????? int *p;
p = new int; //返回類型為int* 類型(整數型指針),分配大小為 sizeof(int);
或:
int* parr;
parr = new int [100]; //返回類型為 int* 類型(整數型指針),分配大小為 sizeof(int) * 100;
?? 而 malloc 則必須由我們計算要字節數,而且在返回后強行轉換為實際類型的指針。
?? int* p;
p = (int *) malloc (sizeof(int));
?
第一、malloc 函數返回的是 void * 類型,假設你寫成:p = malloc (sizeof(int)); 則程序無法通過編譯,報錯:“不能將 void* 賦值給 int * 類型變量”。所以必須通過 (int *) 來將強制轉換。
第二、函數的實參為 sizeof(int) ,用于指明一個整型數據須要的大小。假設你寫成:
int* p = (int *) malloc (1);
代碼也能通過編譯,但其實僅僅分配了1個字節大小的內存空間,當你往里頭存入一個整數,就會有3個字節無家可歸,而直接“住進鄰居家”!造成的結果是后面的內存中原有數據內容所有被清空。
malloc 也能夠達到 new [] 的效果,申請出一段連續的內存,方法無非是指定你所須要內存大小。
比方想分配100個int類型的空間:
int* p = (int *) malloc ( sizeof(int) * 100 ); //分配能夠放得下100個整數的內存空間。
另外有一點不能直接看出的差別是,malloc 僅僅管分配內存,并不能對所得的內存進行初始化,所以得到的一片新內存中,其值將是隨機的。
除了分配及最后釋放的方法不一樣以外,通過malloc或new得到指針,在其他操作上保持一致。
?
?總結:
malloc()函數事實上就在內存中找一片指定大小的空間,然后將這個空間的首地址范圍給一個指針變量,這里的指針變量能夠是一個單獨的指針,也能夠是一個數組的首地址,這要看malloc()函數中參數size的詳細內容。我們這里malloc分配的內存空間在邏輯上連續的,而在物理上能夠連續也能夠不連續。對于我們程序猿來說,我們關注的是邏輯上的連續,由于操作系統會幫我們安排內存分配,所以我們使用起來就能夠當做是連續的。
總結
以上是生活随笔為你收集整理的malloc函数具体解释的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: js获取url参数值
- 下一篇: [Everyday Mathematic