1. 堆区( heap ):由程序员申请分配和释放,属动态内存分配方式,若程序员不释放,程序结束时可能会由 OS 回收。不过这个内存分配很容易引起问题,如果申请的内存不释放就会造成内存泄漏;如果释放的不是所要释放的内存,则轻者引起程序运行结果出错,重者系统崩溃。
2. 栈区( stack ):编译器自动分配释放,存放函数的形参值、局部变量的值,也是属于动态内存分配方式,它由系统分配,所以执行效率也高,不过自由度小,声明时就得决定其具体大小。
3. 全局区(静态区)( static ):全局变量和静态变量的存储是放在一块的,而且初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束后由系统释放,所以也不会造成内存问题。
4.文字常量区和程序代码区,两者都是由系统分配和释放,且文字常量区和前面三区合成为程序数据区,与程序代码区相对应。