码迷,mamicode.com
首页 > 其他好文 > 详细

堆的分配和释放(malloc,free,calloc,realloc)

时间:2020-02-10 22:30:24      阅读:85      评论:0      收藏:0      [点我收藏+]

标签:news   清理   单元   空间   order   内存地址   add   count   malloc   

 

malloc

void * malloc(size_t _Size);

malloc函数在堆中分配参数_Size指定大小的内存,单位:字节,函数返回void *指针。

free

void free(void *p);

free负责在堆中释放malloc分配的内存。参数p为malloc返回的堆中的内存地址

calloc:

void * calloc(size_t _Count, size_t _Size);

calloc与malloc类似,负责在堆中分配内存。Malloc只分配,但不负责清理内存,calloc分配内存的同时把内存清空

第一个参数是所需内存单元数量,第二个参数是每个内存单元的大小(单位:字节),calloc自动将分配的内存置0

int *p = (int *)calloc(100, sizeof(int));//分配100个int

 

realloc

重新分配用malloc或者calloc函数在堆中分配内存空间的大小。

void * realloc(void *p, size_t _NewSize);

第一个参数 p为之前用malloc或者calloc分配的内存地址,_NewSize为重新分配内存的大小,单位:字节。

成功返回新分配的堆内存地址,失败返回NULL.

如果参数p等于NULL,那么realloc与malloc功能一致

Realloc不会自动清理增加的内存,需要手动清理,如果指定的地址后面有连续的空间,那么就会在已有地址基础上增加内存,如果指定的地址后面没有空间,那么realloc会重新分配新的连续内存,把旧内存的值拷贝到新内存,同时释放旧内存。

堆的分配和释放(malloc,free,calloc,realloc)

标签:news   清理   单元   空间   order   内存地址   add   count   malloc   

原文地址:https://www.cnblogs.com/xumaomao/p/12292872.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!