1.申请方式不同:
堆由程序员自己申请释放,堆的申请是动态的,没有静态分配的堆。
栈由系统自动分配。有动态分配和静态分配,静态分配由编译器完成,动态分配则由alloca函数分配。
2.申请效率不同:
堆由程序员分配,速度慢且会有碎片。堆由C++库函数提供,机制复杂,效率比栈低很多。
栈由系统分配,速度快且不会由碎片。计算机在底层对栈提供支持分配专门的寄存器存放栈地址。
3.申请限制和大小:
堆是向高地址扩展,是不连续内存区域,大小可以灵活调整。一般是1G-4G
栈的栈顶和栈底是之前预设好的,栈是向栈底扩展,大小固定。空间默认是4M