数据结构层面
- 栈是线性表
- 线性表->后进先出->则为栈
- 线性表->先进先出->则为队列
- 线性表分为数组和链表,数组和链表都可以实现栈或者队列
- 堆是树,完全二叉树
操作系统层面:是指对内存空间的划分
- 栈
- 内存中地址生长方向由高向低
- 由编译器管理,存放调用栈的上下文环境,如函数信息,函数参数等(调用结束后就会释放,所以后进先出,不需要gc,但是如果过深,会导致栈溢出,程序崩溃)
- 可动态或静态分配
- 空间固定且较小
- 效率高
- 堆
- 内存中地址生长方向由低向高
- 由程序员分配(需要gc,易出现内存泄漏)
- 只可动态分配
- 空间较大
- 效率低(存在空间碎片问题)