目录
malloc/free与new/delete的区别
- 区别一:malloc/free是C/C++的标准库函数,而new/delete是C++独有的操作符。再强调一遍,一个是库函数,一个是操作符。
- 区别二:对于非内部数据类型的对象而言,单个的malloc/free是无法满足动态对象的需求的。比如,对象想在创建的时候,同时执行自己的构造函数,对象在析构的同时,想自动执行自己的析构函数,malloc/free是没法满足的。而new/delete却可以!因为后者是运算符,编译器可以直接定义运算符去将执行构造/析构函数的任务与其连接起来,但前者是库函数,并不在编译器的控制范围之内。
C语言中各自标准内存分配函数是如何使用的
malloc
是最常用的一种开辟内存空间的函数,其嗲用的形式为:
(类型*) malloc(size)
在内存的动态存储区中分配一块长度为‘size’字节的连续区域,返回该区域的首地址,但需要注意的是:此时,内存中的值没有初始化,只是个随机数。
free
调用形式为:
free(void *ptr);
指是否ptr所指向的一块内存空间。
calloc
调用形式为:
(类型*) calloc(n,size)
指在内存的动态存储区中分配n块长度为“size” 字节的连续区域,返回首地址,此时内存中的值都被初始化为0.
calloc与malloc的区别就是,前者是分配n块,后者是默认只分配1块。
realloc
调用形式为:
(类型*)realloc(*ptr,size);
将ptr内存大小增加到size那么大,新加的内存块没有初始化。