内存栈与内存堆的区别

内存栈

又称为栈内存,它有以下特点:
1. 函数压栈和弹栈符合后进先出的原则;
2. 无论是变量还是函数,栈内存都是由高地址向低地址拓展,它是一块连续的内存区域;
3. 栈内存的分配在运行前(编译)完成,运行时回收,且回收的素速度很快;
4. 栈内存是由系统自动分配的;

内存堆

又称为堆内存,它有一下特点:
1. 他是用静态链表来存储内存的地址;
2. 堆内存是由低地址向高地址拓展,它是一块不连续的内存区域;
3. 内存块有两种状态:已使用和闲置,分配时,将内存块标志为已使用,回收时,将内存块标志为闲置;
4. 分配时,它的时间复杂度为O(n),因为它需要遍历链表寻找闲置的内存块;
5. 内存回收的方式有两种,一种是手动回收(C,C++),一种是GC线程自动回收(Java);
6. 标志清除算法是最基本的内存回收算法;
7. 堆内存需要程序员自己申请,并指明大小;

Comments