堆和栈的区别
1.管理方式不同:栈由编译器自动管理,无需程序员手动控制,堆:产生和释放由程序员控制;
2.空间大小不同:栈的空间有限,堆的内存可以达到4G;
3.能否产生碎片不同:栈不会产生碎片,因为栈是一种先进后出的队列,堆则容易产生碎片,多次的new和delete会造成内存的不连续,从而造成大量的碎片;
4.生长方向不同:堆的生长方向是向上的,栈是向下的;
5.分配方式不同:堆是动态分配的,栈可以静态分配以可以动态的分配,但是栈的动态分配由编译器释放;
6:分配效率不同:栈是机器系统提供的数据结构,计算机底层堆栈提供支持,分配专门的寄存器提供存放栈的地址,压栈和出栈都有专门的指令,堆则是由c/c++函数库提供,库函数会按照一定的算法在堆内存中搜索可用的足够大小的空间,如果没有足够大小的空间,就有可能调用系统功能去增加程序数据段的内存空间,这样就有机会分到足够大小的内存,然后进行返回,显然,堆的效率比栈要低的多。