C++堆和栈的区别
-
首先,C++中内存分为五个区:堆、栈、自由存储区、全局/静态存储区、常量存储区。
-
其次,堆和自由存储区要对应C++的new和malloc内存分配。
-
了解完new和malloc后,我们知道C++默认使用堆来实现自由存储(new和delete是使用malloc和free的方式实现的),所以堆中资源是由程序员来控制的,而栈资源是由编译器自动管理的。
-
然后是堆和栈在数据结构上的区别,堆是一种特殊的完全二叉树,而栈是先进后出的,从而栈中存放的都是局部变量和函数参数。
-
堆和栈的内存管理方式:系统中维护了一个记录空闲地址的链表,通过链表将节点空间分配给程序,所以堆是不连续的,访问效率也比较慢;而栈是一块连续的内存区域。这导致经常在堆中new和delete会产生内存碎片,而栈不会,因为先进后出都是一一对应的。
-
其次是空间分布