侯捷老师C++基础课程笔记7-栈、堆和内存管理

P7栈、堆和内存管理

栈Stack

存在于某作用域的内存空间,当调用函数时,函数本身会形成一个stack来放置它所接收的参数以及返回地址,当离开该作用域时,该stack空间自动释放

堆Heap

是系统内存,是由操作系统提供的一块global内存空间,程序可以用new和delete动态分配和管理其中的内存。

 

 

new关键字进行内存动态分配的内部细节

Complex *pc = new Complex(1,2);

在编译器下面转化为三个步骤

 

1.使用函数“operator new”分配内存

  Void* mem = operator new(sizeof (Complex) );

“operator new”函数内部调用malloc(n);

 

2.指针类型转型

  pc = static_cast<Complex*>(mem);

 

3.调用构造函数

  pc ->Complex::Complex(1,2);

 

Delete关键字进行内存动态分配的内部细节

String* ps = new String("Hello");

...

Delete ps;

在编译器下面转化为两个步骤

 

1.调用析构函数

String::~String(ps);

 

2.使用“operatpr delete”函数释放内存

Operator delete(ps);

“operator delete”函数内部调用free(n);

 

动态分配所得的内存块

new

1.上下有两个cookie 各占4个byte,最后一位只能为0或1,0代表未使用,1代表正在使用,从第二位开始代表该内存块大小

2.内存块大小要以16byte为倍数

array new( new[] )

在分配的内存前面增加4个byte记录分配的数组个数。

 

posted @ 2020-08-27 12:37  鸵鸟洵  阅读(293)  评论(0编辑  收藏  举报