申请方式不同:

  栈由系统自动分配。 堆是程序员自己申请和释放的。

申请大小限制不同:

  栈顶和栈底是之前预设好的,栈是向栈底扩展,栈向下,向低地址方向增长,大小固定,可以通过ulimit -a查看,由ulimit -s修改。

  堆向高地址扩展,是不连续的内存区域,大小可以灵活调整。

申请效率不同:

  栈由系统分配,速度快,不会有碎片。

  堆由程序员分配,速度慢,且会有碎片。