簡單介紹內存分配函數 _alloc/malloc/calloc的區別


轉自: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釋放。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM