动态内存

C语言动态内存管理:
1.realloc的作用:
(1)当realloc的第一个参数为空指针时,相当于malloc;
(2)当第一个参数不是空指针时,原空间后面有足够空间时,直接扩容;
(3)当原空间后面没有足够的空间后,重新开辟空间,并将原空间释放,返回新空间的地址;
2.C++动态内存管理:new /delete
(1)new/delete的目的:为了维持C++的自定义类型的机制:保证创建对象时初始化
(2)new/delete和malloc/free的联系和区别:
联系:他们都是动态内存管理的实现入口;
区别:new/delete是C++的操作符,而malloc/free是C语言中的库函数;
malloc/free只是动态分配内存空间/释放空间。而new/delete除了分配空间还会调用构造函数和析构函数进行初始化与清理(清理成员)。
malloc/free需要手动计算类型大小且返回值会void*,new/delete可自己计算类型的大小,返回对应类型的指针。
(3)new/delete的工作过程:
使用new时,先给对象创建空间,再去调用对象的构造函数;
使用delete时,先去调用对象的析构函数,再去释放空间;
使用new开辟空间时先去调用operator new(),operator new再去调用malloc函数;
使用new [ ]开辟空间时先去调用operator new(),operator new再去调用malloc函数;
使用delete回收空间时先去调用operator delete(),operator delete()再去调用free函数;
使用delete [ ]开辟空间时先去调用operator delete(),operator delete() 再去调用free函数;

(4)内置类型和自定义类型的new/delete,malloc/free的匹配问题:
a.当使用new去开辟内存时,使用free去回收空间,析构函数不会被调用,但 程序不会崩溃;
b.当使用new去开辟空间时,使用delete[]去释放,程序可能会崩溃,原因是越界访问;
c.当使用new[]去开辟空间时,使用free去回收空间,程序可能会崩溃,释放的空间时错误的;
d.当使用new[]去开辟空间时,使用delete去回收空间,程序可能会崩溃,释放的空间是错误的;
f.当使用malloc去开辟空间时,使用delete去回收空间,程序不会崩溃,
e.当使用malloc去开辟空间时,使用delete[]去释放,程序不会崩溃,

(5)严格来说,new[]一定要多开辟4个字节,当编译器优化时认为对象的析构函数可调用也可不调用时,new[]可不开辟多4个字节;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值