①:栈由编译器自动管理,堆由程序员控制,容易产生内存泄漏。
②:一般在32位系统下,堆内存可以达到4G;栈的空间很小,默认只有几兆。
③:对于堆来说,因为频繁的new/delete会造成内存空间的不连续,从而造成大量的碎片;栈是先进后出,不会有哪个在中间弹出。
④:从分配效率上讲,栈是及其系统提供的数据结构,计算机底层堆栈有支持,由专门的寄存器存放栈的地址,压栈出栈都由专门的指令执行,因此栈的效率比较高;堆是C++函数库提供的,需要先调用operator new,然后调用类型的构造函数,比较复杂,效率不如栈。