malloc ,calloc 和realloc的区别与联系
2016-07-16 23:28
267 查看
(1)malloc
当一个程序另外需要一些内存时,它就调用malloc函数,从内存池提取一块合适的内存,并返回指向该内存的指针。此时这块内存并没有以任何方式进行初始化。并且由于malloc并不知道需要返回一个什么类型的指针,所以提供了一个可以强转为其他类型的void*类型的指针。如果操作系统无法向malloc提供更多的内存,就返回空指针。所以说每次我们malloc一个空间都应该检查一下返回值。确保它是非NULL的这非常重要。
(2)calloc
calloc也用于内存的分配,和malloc比起来只不过是:
1.calloc将该空间初始化为0(有时候可能会浪费时间)
2.请求内存数量的方式不同。calloc包括所需元素的数量和元素的字节数
(3)realloc
realloc用于修改一块原先已经分配好的内存大小。可以用来扩大或者缩小一块内存。
1.若为增大则原内容保留,新增的内存块添加到原先内存块的后面。
2若为缩小则该内存块后面多余的部分能够将被拿掉。剩余部分仍然保留不变。
如果原内存块无法改变大小,realloc将重新分配一块正确的内存,并把原先那块内存的内容复制到新的块上。
当一个程序另外需要一些内存时,它就调用malloc函数,从内存池提取一块合适的内存,并返回指向该内存的指针。此时这块内存并没有以任何方式进行初始化。并且由于malloc并不知道需要返回一个什么类型的指针,所以提供了一个可以强转为其他类型的void*类型的指针。如果操作系统无法向malloc提供更多的内存,就返回空指针。所以说每次我们malloc一个空间都应该检查一下返回值。确保它是非NULL的这非常重要。
(2)calloc
calloc也用于内存的分配,和malloc比起来只不过是:
1.calloc将该空间初始化为0(有时候可能会浪费时间)
2.请求内存数量的方式不同。calloc包括所需元素的数量和元素的字节数
(3)realloc
realloc用于修改一块原先已经分配好的内存大小。可以用来扩大或者缩小一块内存。
1.若为增大则原内容保留,新增的内存块添加到原先内存块的后面。
2若为缩小则该内存块后面多余的部分能够将被拿掉。剩余部分仍然保留不变。
如果原内存块无法改变大小,realloc将重新分配一块正确的内存,并把原先那块内存的内容复制到新的块上。
相关文章推荐
- c语言中malloc、realloc与calloc 的区别以及联系
- C++中new与delete、malloc与free应用分析
- C语言中的malloc使用详解
- new和malloc的区别深入解析
- C/C++: Inline function, calloc 对比 malloc
- new、delelte和malloc、free的关系
- 初识英特尔线程构建模块之内存管理tbb_malloc
- malloc calloc realloc
- 浅谈C中的malloc和free
- 一级指针和二级指针做形参分配动态地址空间
- 用brk实现sbrk,关于brk的返回值
- C语言堆内存堆申请与文件读入的性能分析
- C中动态分配内存
- malloc要不要强制转换返回值
- C malloc和calloc函数总结
- 对程序内存结构和程序存储位置的理解
- 【C语言】malloc和realloc的区别以及使用
- 用strace跟踪malloc内存分配
- C++学习基础三——迭代器基础
- 核心动画Core Animation