关于堆和栈
-
对象的内存
全局区(数据段):全局变量
栈空间:函数里的局部变量
堆空间:动态申请内存(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};