不得不懂的堆和栈

115 阅读1分钟

数据结构层面

  • 栈是线性表
    • 线性表->后进先出->则为栈
    • 线性表->先进先出->则为队列
    • 线性表分为数组和链表,数组和链表都可以实现栈或者队列
  • 堆是树,完全二叉树

操作系统层面:是指对内存空间的划分

    • 内存中地址生长方向由高向低
    • 由编译器管理,存放调用栈的上下文环境,如函数信息,函数参数等(调用结束后就会释放,所以后进先出,不需要gc,但是如果过深,会导致栈溢出,程序崩溃)
    • 可动态或静态分配
    • 空间固定且较小
    • 效率高
    • 内存中地址生长方向由低向高
    • 由程序员分配(需要gc,易出现内存泄漏)
    • 只可动态分配
    • 空间较大
    • 效率低(存在空间碎片问题)