_alloc/malloc/calloc 內存分配的區別

_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釋放。

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