1.栈 - 由编译器自动分配释放
2.堆 - 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收
3.全局区(静态区),全局变量和静态变量的存储是放在一块的 - 程序结束释放
4.文字常量区, 存放字符串常亮。- 程序结束释放
5 程序代码区,存放2进制代码。
堆和栈主要的区别有以下几点:
1、管理方式不同: 堆内存有程序员管理,容易产生内存泄露 栈内存有编译器系统自动管理分配和释放,
2、空间大小不同: 堆内存基本上没限制,栈内存有编译器管理,会有限制
3、能否产生碎片不同: 堆内存会产生内存碎片, 栈内存是链式存储,不会产生碎片
4、生长方向不同;堆内存,生长方向是向上的,就是向着内存地址增加的方向;栈内存,生长方向是向下的,是向着内存地址减小的方向增长。
5、分配方式不同: 堆都是动态分配的,没有静态分配的堆。栈有2种分配方式:静态分配和动态分配。
6、分配效率不同: 堆内存的分配效率没有栈内存高