malloc calloc realloc
定义
1 | // Linux |
区别
函数之间的区别
malloc
申请的区域值不被初始化,而calloc
会将其初始化为0
malloc
输入为需要的字节数,calloc
输入为对象数nmemb
与每个对象字节数size
realloc
为已分配的地址重新分配大小,可增可减
三个函数均通过系统调用sbrk
实现。
malloc
与new
运算符的区别
malloc
是stdlib.h
中的库函数,而new
是C++运算符malloc
需要指定所需字节数,new
则由编译器推算,无需指定大小malloc
返回void *
,后续需要自己转换类型,new
则直接返回申请对象类型的指针malloc
申请失败时返回NULL
,new
则会抛出异常std::bad_alloc
malloc
直接在堆上分配内存,new
则在自由存储区上分配。大部分编译器用堆实现自由存储区。堆是操作系统维护的内存区域,而自由存储区是C++概念