堆和栈是C/C++的两种内存分配方式:
堆 和 栈 的 不 同 : {\orange{堆和栈的不同:}} 堆和栈的不同:
1 − 管 理 方 式 : {\green{1-管理方式:}} 1−管理方式:
栈由编译器自动管理,堆由程序员控制
2 − 空 间 大 小 : {\green{2-空间大小:}} 2−空间大小:
一般堆空间很大,栈空间很小
3 − 碎 片 问 题 : {\green{3-碎片问题:}} 3−碎片问题:
堆会有频繁堆new/delete造成空间不连续,碎片化。
栈先进后出,永远不会有内存块从中间弹出,不会碎片。
4 − 生 长 方 向 : {\green{4-生长方向:}} 4−生长方向:
堆生长方向向上,向内存地址增加。
栈生长方向向下,向内存地址减小。
5 − 效 率 : {\green{5-效率:}} 5−效率:
栈由系统提供,效率高。
堆由C/C++函数库提供管理,再由系统提供,再加碎片化,效率低。