c++ 数据的存储位置

c++主要的内存区域

  1. 常量存储区(Const Data);
  2. 栈(Stack);
  3. 自由存储区(Free Store);
  4. 堆(Heap);
  5. 全局/静态存储区(Global/Static);

常量存储区(Const Data)

  1. 常量存储区保存字符串常量和其他在编译期可以确定值的数据;
  2. 类对象是不能存储在这个区间的;
  3. 这个区的数据在程序运行期间都是可以使用的;
  4. 这个区的数据是只读的, 针对此区数据的修改行为是行不通的;
  5. ??

栈(Stack)

  1. 栈存储自动变量, 分配速度快于动态存储区(堆和自由存储区);
  2. 空间分配紧紧涉及到栈顶指针的增加, 而不需要复杂的管理;
  3. 对象在分配内存后直接构造, 内存回收后直接销毁, 所以除了
    未初始化的栈空间外, 程序员没有直接管理内存的机会(除非
    使用有意篡改的new和显式析构函数);

自由存储区

  1. 俩大动态内存区域之一, 通过 new 分配, delete 释放;
  2. 通过new/delete动态分配和释放对象的抽象概念;
  3. 和堆有区别, 并非等价;

堆(Heap)

  1. 俩大动态内存区域之一, 通过 malloc/free(或其他变体)分配/释放;
  2. 由操作系统维护;
  3. 在没有明确说明 new/delete 用 malloc/free 实现的编译器中, 堆和自由
    存储区是不同的;
  4. ??

全局/静态存储区

  1. 程序启动是已经分配好存储空间, 但是初始化可能在程序执行时进行;
  2. ??

参考

Memeory Management - Part1