内存管理、堆、栈(观看侯捷老师视频总结)

时间:2021-09-08 19:49:07

说在开始

我相信,在大家使用C++语言编程过程中一定会有这样的一个问题。

Complex c1(1,2);
Complex *p=new Complex(1,2);

这两种方式都是创建对象,那么这两种方式到底有什么区别呢?还有经常有人会提起堆、栈的概念,那又是什么意思呢 ?当然这里的堆和数据结构当中的“堆”还是有一定区别的。在观看侯捷老师的本节视频后,解释了如下几个问题,在这里进行总结。

本节将解释如下的问题:
  1. 堆和栈的概念、直接创建对象和动态创建对象区别
  2. 全局对象的声明周期
  3. new、delete、malloc、free的具体含义,以及他们的工作过程
  4. delete p和我delete [] p的区别
  5. 申请到的内存具体内容是什么

堆和栈的概念、直接创建对象和动态创建对象区别

Stack,Heap

Complex c1(1,2)//c1的空间来自stack
Complex *p=new Complex(3);//Complex(3)是一个临时对象,其空间来自heap

什么叫栈(Stack)?什么叫堆(Heap)?

栈是存在某作用域(scope)的一块内存空间(Memory space)。例如,当你调用函数,函数本身即会形成一个stack用来放置它所接受的参数,以及返回地址。其函数本身内声明的任何变量,其所使用的内存块都来自上述的Stack
Heap,是指由操作系统提供的一块全局(global)内存空间,程序可动态分配从其获得若干块。只能动态取得,在程序的任何地方都可以动态获得。

两种内存方式的声明周期
1. c1在方法执行结束后,其生命自然就消失了
2. 从堆当中获取的,需要自己手动去delete,否则一直存在。

全局对象的声明周期

内存管理、堆、栈(观看侯捷老师视频总结)

new、delete、malloc、free的具体含义,以及他们的工作过程

内存管理、堆、栈(观看侯捷老师视频总结)
内存管理、堆、栈(观看侯捷老师视频总结)
new有一个执行构造函数的过程,和malloc
delete有一个执行析构函数的过程和free

delete p和我delete [] p的区别

内存管理、堆、栈(观看侯捷老师视频总结)

分配出的内存内容

内存管理、堆、栈(观看侯捷老师视频总结)

最后

我可能某些地方解释的不是很合理,欢迎大家指出,我会及时修改,如果大家想看侯捷老师的视频可以联系我。