C++内存

本文探讨了堆和栈在内存管理中的角色,重点介绍了堆空间动态申请内存的机制,如malloc和new操作。同时阐述了何时使用栈空间(如局部变量)和堆空间(如对象生命周期控制)的考量因素。还提到了内存初始化的不同方式,如 memset 和 new 操作符的使用,并强调了delete或free后指针仍需谨慎处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于堆和栈

  • 对象的内存
    全局区(数据段):全局变量
    栈空间:函数里的局部变量
    堆空间:动态申请内存(malloc、new)
    在这里插入图片描述

  • 堆空间申请
    malloc在堆申请了4个字节的空间,但是值得注意的是指针p是存在栈空间的,即栈空间的4个字节存放着malloc出来空间的地址

int *p = (int *)malloc(4);
  • 自动分配栈空间
int a = 10;

什么时候需要用到栈空间,什么时候需要用堆空间呢?
例:有一个对象叫僵尸,当其血量减为0时,僵尸死亡,即”僵尸“对象的内存应该被释放。由于执行完函数,栈空间会自动回收内存,不满足我们对“僵尸”对象生命周期控制的需求,而堆空间则可根据需求来释放内存。

malloc/free和new/delete

> > >> >>malloc/free,C++中可用new/delete来申请一个堆空间
1.首先会在栈空间创建一个指针rocket
在这里插入图片描述
2.在堆中new一个内存出来
在这里插入图片描述
3.delete后内存不可用,但并不意味着rocket指向为空,rocket还是指向刚才那个地址,只是那块内存已经不可用了。
在这里插入图片描述
4.运行结果
在这里插入图片描述

初始化

memset(地址,设置值,大小);

int size = sizeof(int)*10;
int *p = (int *)malloc(size);
memset(p,0,size);

p1:不初始化
p2:初始化为0
p3:初始化为3
p4、p5:全初始化为0
p6:第一个元素初始化为0

int *p1 = new int;
int *p2 = new int();
int *p3 = new int(3);
int *p4 = new int[5]();
int *p5 = new int[5]{};
int *p6 = new int[5]{3};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值