五星 C++ 堆和栈的区别

申请方式: 栈是系统自动分配,堆是程序员主动申请。申请后系统响应:分配栈空间,如果剩余空间大于申请空间则分配成功,否则分配失败栈溢出;申请堆空间,堆在内存中呈现的方式类似于链表(记录空闲地址空间的链表),在链表上寻找第一个大于申请空间的节点分配给程序,将该节点从链表中删除,大多数系统中该块空间的首地址存放的是本次分配空间的大小,便于释放,将该块空间上的剩余空间再次连接在空闲链表上。
栈在内存中是连续的一块空间(向低地址扩展)最大容量是系统预定好的,堆在内存中的空间(向高地址扩展)是不连续的。
申请效率: 栈是有系统自动分配,申请效率高,但程序员无法控制;堆是由程序员主动申请,效率低,使用起来方便但是容易产生碎片。
存放的内容: 栈中存放的是局部变量,函数的参数;堆中存放的内容由程序员控制。

问题1:堆的内存为什么是不连续的

问题2:堆和栈的不同点

管理方式:堆-程序员。栈-系统。

空间大小:堆-不确定。栈-最大容量是系统设定好的。

生长方向:堆-向高地址扩展,不连续。栈-向低地址扩展,连续。

分配效率:堆-程序员申请,效率低,容易产生碎片。栈-系统分配,效率高,但是程序员不能控制。

存放内容:堆-程序员自己申请的内容。栈-局部变量,函数参数等。