面试题-堆和栈的区别

堆和栈的区别

在计算机领域,堆栈是一个不容忽视的概念,我们编写的C语言程序基本上都要用到。但对于很多的初学着来说,堆栈是一个很模糊的概念。堆栈:

  • 一种数据结构。
  • 一个在程序运行时用于存放的地方。

数据结构的栈和堆

  • 栈是一种具有后进先出性质的线性表的数据结构,也就是说后存放的先取,先存放的后取。这就如同我们要取出放在箱子里面底下的东西(放入的比较早的物体),我们首先要移开压在它上面的物体(放入的比较晚的物体)。
  • 堆就是用数组实现的二叉树,所有它没有使用父指针或者子指针。堆根据“堆属性”来排序,“堆属性”决定了树中节点的位置。
    堆的结构参考:https://www.jianshu.com/p/6b526aa481b1

内存中的堆栈

  • 栈中分配局部变量、临时变量的内存空间,内存中的栈区处于相对较高的地址以地址的增长方向为上,栈的内存相对较少,所以开辟太多的,可能会导致栈溢出(例如使用递归的时候,递归层数太深或是没有递归终止的条件都可能导致栈溢出)。
  • 堆区是向上增长的用于分配程序员申请的内存空间,如malloc和new出来的空间都是放在堆区,这些堆区的变量的特点就是手动开辟和手动释放,没能及时释放可能会导致内存泄漏的问题。

堆和栈哪个哪个存取更快?
分配和释放,堆在分配和释放时都要调用函数(MALLOC,FREE),比如分配时会到堆空间去寻找足够大小的空间(因为多次分配释放后会造成空洞),这些都会花费一定的时间,具体可以看看MALLOC和FREE的源代码,他们做了很多额外的工作,而栈却不需要这些。 综上所述,栈的效率比堆高

发布了90 篇原创文章 · 获赞 56 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_37266079/article/details/104351199