zoukankan      html  css  js  c++  java
  • 堆和栈的区别




    参考博客请看参考博客1 参考博客2 参考博客3

    1、数据结构中的堆和栈

    栈:是限定仅在表尾进行插入删除操作的线性表先进后出

    堆:堆是一种经过排序的树形数据结构,每个结点都有一个值。通常我们所说的堆的数据结构,是指二叉堆。堆的特点是根结点的值最小(或最大),且根结点的两个子树也是一个堆。由于堆的这个特性,常用来实现优先队列,堆的存取是随意

    2、C++内存中的堆和栈

    2.1、程序内存分配

    1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。

    2、堆区(heap) — 一般由程序员分配释放或自动释放。它与数据结构中的堆是两回事。

    3、全局区(静态区)(static)—其不在栈中也不在堆中。
    全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 - 程序结束后由系统释放

    4、文字常量区—常量字符串就是放在这里的。 程序结束后由系统释放

    5、程序代码区—存放函数体的二进制代码。

    2.2、堆和栈的区别

    1. 堆是存储的单位,栈是运行时的单位

    2. 堆负责数据,栈负责处理逻辑【分而治之的思想,使得处理逻辑更加清晰】

    3. 堆中的对象可以根据需要动态增长,栈的大小固定【但二者如此处理,相得益彰】

    4. 堆中存放的是对象,栈中存放的是基本数据类型和堆中对象的引用【因为基本数据类型的长度固定、生命周期固定】

    5. 堆内的资源一般由程序员分配释放,若不释放可能由OS回收,分配方式类似于链表   栈内的资源由操作系统自动分配释放

    6. 堆和栈就是面向对象的完美结合【对象的属性就是数据》放在堆中   对象的行为就是方法》放在栈中】

    7. 使用栈就象我们去饭馆里吃饭,只管点菜(发出申请)、付钱、和吃(使用),吃饱了就走,不必理会切菜、洗菜等准备工作和洗碗、刷锅等扫尾工作,他的好处是快捷,但是自由度小。    
          使用堆就象是自己动手做喜欢吃的菜肴,比较麻烦,但是比较符合自己的口味,而且自由度大。

    3、堆和栈的工作原理

    参考博客4

    比较难懂,尽力而为。

  • 相关阅读:
    第一冲刺阶段——站立会议第六天4月23日
    第一冲刺阶段——站立会议第五天4月22日
    第一冲刺阶段——站立会议第四天4月21日
    第一冲刺阶段——站立会议第三天4月20日
    第一冲刺阶段——站立会议第二天4月19日
    第一冲刺阶段——站立会议第一天4月18日
    WBS
    团队项目计划
    团队项目——班级派发布视频
    团队简介
  • 原文地址:https://www.cnblogs.com/Fflyqaq/p/11755766.html
Copyright © 2011-2022 走看看