3.7、内存管理(new·delete)

1. 内存结构

内核空间

(用户代码不能读写)

栈(向下增长)

内存映射段

(文件映射、动态库、匿名映射)

堆(向上增长)

数据段

(全局数据、静态数据)

代码段

(可执行代码/只读常量)

2. C++内存管理方式:new、delete

1)内置类型中的new、delete:

内置类型中的new并不会自己初始化创建的变量,需要人工初始化;

针对内置类型,new/delete 跟 malloc/free 没有本质区别,只有用法的区别,new/delete用法简化了!

//new用法:new + 类型
int* P2 = new int;//用new开辟出一个int空间,并把起始地址给P2
int* P2 = new int[5];//用new开辟出5个int空间(其实是连续的空间),并把起始地址给P2

int* P2 = new int(5);//用new开辟出一个int空间,并初始化为5,并把起始地址给P2
int* P2 = new int[5]{1,2,3};//用new开辟出5个int空间(其实是连续的空间),并初始化为1,2,3,0,0,并把起始地址给P2


//delete用法:delete + 地址
delete P2;//释放P2对应的一段空间(对应于一个空间类型,如1个int)

delete[] P2;//释放P2对应的一段空间(对应于多个空间类型,如5个int)

2)自定义类型中的new、delete:

其实C++中的new、delete是为自定义类型准备的,不仅在堆中申请出空间,还会用构造函数和析构函数

//自定义类型:A
A* P2 = new A;//开辟一个A大小的空间并把地址给P2,并调用构造函数初始化
delete P2;//释放P2所指的空间,并调用析构函数(P2为自定义类型开辟的空间的地址)

你可能感兴趣的:(c++,算法,开发语言)