欢迎使用优快云-c与c++中的动态内存深度剖析

本文深入剖析C语言中的堆栈动态内存管理,包括malloc、calloc、realloc和free函数的使用,以及C++中new、delete操作符的内部机制。详细讲解了动态内存分配与释放的过程,帮助理解内存泄漏的原因。

**

##干货: c与c++中的动态内存深度剖析

一点整理,希望对你有帮助。。。


c语言中分为在堆或者栈中进行动态内存管理,首先堆上开辟空间通常使用malloc/calloc/realloc三个函数,使用free将申请的空间释放掉。
三个函数返回值均为void*,三个函数区别在于其参数不同,如下:
p=(in*)malloc(sizeof(int));//字节数
p = (int*) calloc (n,sizeof(int));//元素个数,字节数且元素初始化为0
p= (int*)realloc(ptr,sizeof(int));//指针,字节数,指针为空则malloc,非空则扩容。
注意:使用malloc/calloc/realloc则必须使用free来释放内存,否则会造成内存泄漏。
其次,在栈上使用_alloca动态内存开辟,栈上内存由编译器自动维护,不需要用户显示释放 。
c++中包容了C中原有的管理方式,也提出了自己的内存管理方式:new和delete运算符。
注意:new和delete不是函数,是操作符
// 动态申请一个int类型的空间
int* ptr1 = new int;
// 动态申请一个int类型的空间并初始化为10
int* ptr2 = new int(10);
// 动态申请10个int类型的空间
int* ptr3 = new int[3];
new与delete的剖析
new()–>operator new()–>malloc()–>构造函数–>return ptr
//new操作符通过调用operator new()函数进行申请空间与初始化,operator new()先调用malloc函数申请空间,再调用构造函数初始化对象,本质上operator new()是malloc()的封装
与其对应的使delete(),注意的使new和delete一定是搭配使用的,delete()则负责释放空间清理对象
delete()–>析构函数–>operator delete()->free()
//operator delete()则显然是free()的封装,operator delete()先调用析构函数进行清理工作,再调用free()释放空间
new[count]和delete[count]:
申请count大小的数组空间与清除,也就是在new()时调用count次的构造函数,在delete()时调用count次的析构函数,其核心本质和new /delete是相同的

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值