c++主要的内存区域
- 常量存储区(Const Data);
- 栈(Stack);
- 自由存储区(Free Store);
- 堆(Heap);
- 全局/静态存储区(Global/Static);
常量存储区(Const Data)
- 常量存储区保存字符串常量和其他在编译期可以确定值的数据;
- 类对象是不能存储在这个区间的;
- 这个区的数据在程序运行期间都是可以使用的;
- 这个区的数据是只读的, 针对此区数据的修改行为是行不通的;
- ??
栈(Stack)
- 栈存储自动变量, 分配速度快于动态存储区(堆和自由存储区);
- 空间分配紧紧涉及到栈顶指针的增加, 而不需要复杂的管理;
- 对象在分配内存后直接构造, 内存回收后直接销毁, 所以除了
未初始化的栈空间外, 程序员没有直接管理内存的机会(除非
使用有意篡改的new和显式析构函数);
自由存储区
- 俩大动态内存区域之一, 通过 new 分配, delete 释放;
- 通过new/delete动态分配和释放对象的抽象概念;
- 和堆有区别, 并非等价;
堆(Heap)
- 俩大动态内存区域之一, 通过 malloc/free(或其他变体)分配/释放;
- 由操作系统维护;
- 在没有明确说明 new/delete 用 malloc/free 实现的编译器中, 堆和自由
存储区是不同的; - ??
全局/静态存储区
- 程序启动是已经分配好存储空间, 但是初始化可能在程序执行时进行;
- ??