C++内存分区

在C++程序中内存分为5个区:

  • 自由存储区
  • 全局/静态存储区
  • 常量存储区。

程序中的各种数据都存储在这些内存区域中。

栈区由编译器自动分配和释放,存放函数的参数以及局部变量。其分配运算内置于处理器的指令集中,效率很高。但是可使用的总量有限,一般不会超过1M字节。

堆区中内存的分配和释放由开发者负责。一般用运算符new分配内存,并用运算符delete释放内存。一个new要对应一个delete,否则会导致内存泄露。如果没有释放,在程序结束的时候操作系统会自动回收。在堆上可分配的内存比栈上大了很多,且使用非常灵活。

自由存储区和堆类似,但是其内存管理是通过库函数malloc和free等进行的。在C程序中经常使用,虽然在C++程序中仍然可以使用,但不如用堆方便。

全局/静态存储区中存放的是全局变量和静态变量。该存储区分配的内存在整个程序运行期间一直有效,直到程序结束由系统回收。

常量存储区中存储的是常量,通常不允许修改。在程序中定义的常量以及指针字符串都存储在这里。