1> 管理方式不同:栈 (stack) 由操作系统自动分配释放;堆 (heap) 由程序员申请和释放,容易产生内存泄漏;
    2> 空间大小不同:每个进程拥有的栈 (stack) 的大小要远远小于堆 (heap) 的大小;Linux默认为1M,Windows默认为2M。
    3> 分配方式不同:栈 (stack) 有2种分配方式:静态分配和动态分配。静态分配是由操作系统完成的,比如局部变量的分配。动态分配由alloca函数进行分配,但是栈 (stack) 的动态分配和堆 (heap) 是不同的,他的动态分配是由操作系统进行释放,无需手动实现。堆都是动态分配的。
    4> 分配效率不同:栈 (stack) 的效率比堆 (heap) 的好。栈 (stack) 由操作系统自动分配,会在硬件层级对栈提供支持:分配专门的寄存器存放栈的地址,压栈出栈都有专门的指令执行,这就决定了栈的效率比较高。堆 (heap) 是由C/C++提供的库函数或运算符来完成申请与管理,频繁的内存申请容易产生内存碎片。
    5> 存放内容不同:栈 (stack) 存放的内容,函数返回地址、相关参数、局部变量和寄存器内容等。堆 (heap),一般情况堆顶使用一个字节的空间来存放堆的大小,而堆中具体存放内容是由程序员来填充。