堆,栈,全局/静态存储区,常量存储区
一个C++程序,大致可以划分为以上几个存储区
为什么不算上自由存储区?
只有存储区是站在C++层面上的存储区,通过new分配,delete释放
堆是站在操作系统和C层面上的存储区,通过malloc分配,free释放
事实上,他们分配的内存在大多数时候是同一块存储区,只是不同层面不同表示。
原因如下:
new关键字的执行分为:分配内存,构造对象,两步。
在第一步分配内存(运行::operator new),许多编译器,使用malloc来分配内存。可参考SGI STL的内存池。
(如有不对,请批评指正)