轉自:http://www.cnblogs.com/wenxp2006/archive/2012/10/18/2728967.html
_alloc
原型:void *_alloc(size_t size);
本函數與上述的兩個函數不同,因為它是在棧上分配了size大小的內存,因此使用此函數分配的內存不用再擔心內存釋放的情況了。但是使用此函數需要注意的是:在函數內部使用此函數分配的內存隨着函數的終結不復存在,因此不能將此函數分配的內存供函數外部使用。
malloc
原型:void * malloc(size_t size);
該函數將在堆上分配一個size byte大小的內存。它分配的單原完全按字節大小計算,因此如此分配N個單原的student_t,那么要這樣實現:(stdent_t *)malloc(N * sizeof (student_t));
calloc
原型:void* calloc(size_t size, int count);
該函數解決了上面的函數的不足,它將分配count個size大小的單原,因此在便用此函數的時候就會很方便,比如對上面的例子就可以:(student_t *)calloc(sizeof(t_student), N)就可以了。這樣使用就會很清晰的知道分配的內存是一種什么樣的邏輯方式。
malloc與calloc沒有本質區別,malloc之后的未初始化內存可以使用memset進行初始化。
realloc是在malloc的基礎上增加內存分配,free函數用來對分配在堆的內存進行釋放以防內存泄漏的產生。
sbrk函數用來向os申請數據段,供malloc,calloc及realloc申請使用。
New和delete是c++中的運算符,調用malloc申請內存后初始化為對象,用delete釋放。