自由空间和引用#
需求
简单理解 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*