面试题 您所在的位置:网站首页 数据结构的堆栈和内存的堆栈 面试题

面试题

#面试题| 来源: 网络整理| 查看: 265

堆和栈的区别

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

一种数据结构。一个在程序运行时用于存放的地方。 数据结构的栈和堆 栈是一种具有后进先出性质的线性表的数据结构,也就是说后存放的先取,先存放的后取。这就如同我们要取出放在箱子里面底下的东西(放入的比较早的物体),我们首先要移开压在它上面的物体(放入的比较晚的物体)。堆就是用数组实现的二叉树,所有它没有使用父指针或者子指针。堆根据“堆属性”来排序,“堆属性”决定了树中节点的位置。 堆的结构参考:https://www.jianshu.com/p/6b526aa481b1 内存中的堆栈 栈中分配局部变量、临时变量的内存空间,内存中的栈区处于相对较高的地址以地址的增长方向为上,栈的内存相对较少,所以开辟太多的,可能会导致栈溢出(例如使用递归的时候,递归层数太深或是没有递归终止的条件都可能导致栈溢出)。堆区是向上增长的用于分配程序员申请的内存空间,如malloc和new出来的空间都是放在堆区,这些堆区的变量的特点就是手动开辟和手动释放,没能及时释放可能会导致内存泄漏的问题。

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



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有