堆和栈是程序运行过程中的两个非常重要的数据结构,两者的不同主要体现在以下几个方面:
(1)分配和管理方式不同。堆是动态分配的,其分配和释放一般由程序员控制,容易产生内存泄露。而栈是由编译器自动管理的,申请效率相对高一些。
(2)内存地址增长方式不同。堆向内存地址增加的方向增长,栈由内存高地址向低地址增长。
(3)碎片问题不同。对于堆区,频繁的new/delete或malloc/free操作会造成内存空间不连续,产生大量的碎片,降低程序的运行效率。栈不存在碎片的问题。
(4)存放的内容不同。堆用来存储程序运行时动态分配的变量,栈存放非静态局部变量/函数参数/返回值等信息。