堆和栈

常见问题:

1.堆和棧的区别

数据结构中的堆栈区别:

是两种数据结构,栈 是一种线性结构,表中数据是遵循先入后出的原理

堆 是一种特殊的树形结构,是完全二叉树,

操作系统中的堆栈:区别

堆:按需申请,动态分配,在程序结束前是不会删除已申请内存,需要程序主动释放请求(free delete),用了以后忘记释放,内存泄漏,可以理解为当前可以使用的闲置内存,OG

栈:在程序编译的时候,由编译器参数决定大小分配的内存,用于存储局部变量,或者函数调用栈的保存。当局部变量离开作用域,所占内存就会被系统释放。

栈的另一个作用则是保存函数调用栈,这时和数据结构的栈就有关系了。在函数调用过程中,常常会多层甚至递归调用。每一个函数调用都有各自的局部变量值和返回值,每一次函数调用其实是先将当前函数的状态压栈,然后在栈顶开辟新空间用于保存新的函数状态,接下来才是函数执行。当函数执行完毕之后,栈先进后出的特性使得后调用的函数先返回,这样可以保证返回值的有序传递,也保证函数现场可以按顺序恢复。操作系统的栈在内存中高地址向低地址增长,也即低地址为栈顶,高地址为栈底。这就导致了栈的空间有限制,一旦局部变量申请过多(例如开个超大数组),或者函数调用太深(例如递归太多次),那么就会导致栈溢出(Stack Overflow),操作系统这时候就会直接把你的程序杀掉

你得先看重你自己,否则别人就会当你一钱不值。
原文地址:https://www.cnblogs.com/ajiffuu/p/14590617.html