区别
1.申请方式:栈是系统自动分配和释放的,堆是程序员手动分配释放的。
2.效率:栈是系统分配的,速度快,没有内存碎片。堆有程序员分配,速度较慢,操作不动会产生内存碎片。
3.扩展方向:栈是由高地址向低地址扩展,堆是低地址向高地址扩展。
4.程序中的局部遍历是使用栈空间,new/malloc等使用的是堆空间,函数的调用,形参,返回值的压栈出栈也是使用栈空间。
为什么栈更快
栈是操作系统提供的数据结构,计算机底层对他提供了一系列的支持:分配专门的寄存器存储寄存器地址,压栈和出栈都有相应的指令; 而堆是C/C++库函数提供的,机制复杂,需要一些分配内存,合并内存,释放内存的算法,所以效率低。
大根堆
父节点的值大于等于子节点的值
小根堆
父节点的值小于等于子节点的值