C++中五种不同类型的内存区域,每种区域中的特性都不同。
1、常量区:主要存储的是字符串和其他在编译期就已知道的数据。它的生命周期和程序等同,并且数据是只读的。如果试图对它修改,结果根据编译器而异。
2、栈区:存储的是自动变量。它的内存分配通常是最快,因为它只涉及的栈指针的操作。它定义时构造,在自动变量作用域结束时销毁。因而我们无法对尚未分配的栈空间操作,除非用显式析够和布局new。
3、自由存储区:由new/delete分配和释放。对象的生命期可能小于分配的存储空间的生命期。即分配内存不一定要初始化,销毁对象未必要释放空间。
4、堆区:通过malloc()/free()分配和释放。在某些编译器中,默认的全局的new/delete调用的malloc()/free().在堆中分配的内存不能在自由存储区安全的释放,反之亦然。在堆内存可用在布局new的构造、析够中。
5、全局/静态区:程序启动时分配了内存,当只有用时才可以初始化。跨编译单元的全局变量的初始化顺序是未定的。
在C++中优先使用自由存储(new/delete),避免用malloc/free.