自由空间和引用

自由空间和引用#

需求

简单理解 new 运算符、引用的概念。

提示

视频

自由空间#

当你编写一个 C++ 程序时,编译器为你的代码分配内存(也称为 代码存储 (code storage)或 文本存储 (text storage)),并为你定义的全局变量分配内存(称为 静态存储 (static storage))。编译器还为你预留调用函数时所需的空间,函数需要用这些空间保存其参数和局部变量(称为 栈存储 (stack storage)或 自动存储 (automatic storage))。计算机中剩余的内存是“自由的”(“空闲的”),可以用于其他用途。内存分布:

classDiagram class 内存布局 内存布局 : +代码 内存布局 : +静态数据 内存布局 : +自由空间 内存布局 : +栈

C++ 语言使用 new 运算符将“自由空间” (free store,又称为 (heap))变为可用状态。

double* p = new double[4]; // 在自由空间中分配 4 个 double

这段代码要求 C++ 运行时系统在自由空间中分配 4 个 double,并指向第一个 double 的指针返回给我们使用。

运算符 new 返回一个指向它所创建的对象的指针。

  • 若它创建了多个对象,则返回指向第一个对象的指针。

  • 若对象的类型是 X,则 new 返回的指针类型是 X*

例如:

char* q = new double[4]; // 错误:将 double* 赋予 char*

自由空间分配#