博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
什么是堆栈?
阅读量:5263 次
发布时间:2019-06-14

本文共 978 字,大约阅读时间需要 3 分钟。

    堆栈(heap and stack)的概念在计算机领域中不容忽视。虽然堆栈常被连着念,堆与栈是两个相对的概念:堆指先进先出(first in first out),栈指先进后出(first in last out)。

       很显然,堆与栈映射了人类社会的许多现象。比如超市的食品柜台和路边饮料贩卖机的存取顺序,为了防止过期,总是将新进货放在最里面,外侧的食物被顾客不断拿取:这就是堆。再想象一个小朋友用来存放糖果的长长的抽屉,无论拿糖还是放糖都习惯在抽屉的最外侧操作,久之,里面的糖果就过期了:这是栈。显然“堆”在人类社会中更“合理”些。

       如此看来,数据栈只能在一端(称为栈顶(top))对数据项进行插入和删除,而数据堆可以从两端同时操作。因此栈的特性是严格,有序,规范。相反,堆就是自由,灵活,随意的。但是堆与栈的共通之处在于,数据的读写不根据内存地址,而是根据写入的顺序决定读出的顺序。所以,这种独特的缓存机制虽要求每个数据单元的大小等价,却提供了高速读写数据的能力。

      1.计算机/网络设备中的缓存堆。所谓缓存可以视作临时存储的一个缓冲区(cache),交换机和路由器都自带这种缓存区,当网线带宽的吞吐量超过cpu的计算速度时,溢出的数据就会被安置在缓存里,以“堆积”的形式“排队”等候被处理。它的灵活之处在于,缓存容量大小可以调整,既可以手动静态指定也可以程序动态分配。它的高效在于比普通内存的速度快许多。

      2.高级程序语言。一个由C/C++编译的程序占用的内存分为以下几个部分:栈区,堆区,静态区,常量区,程序代码区。当C语言函数被调用时,堆栈区会由编译器或程序员分配释放,用来存
放函数的参数名,局部变量等。在java中,栈与堆都是被用来在RAM中存放数据的地方,与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆。
      3.MPLS(
多协议标签交换)中的标签栈。在mpls vpn中,栈底标签和栈顶标签由不同协议分配分发,被用来准确地锁定两端的BGP路由器以及中间的标签交换路径。BGP分配的栈底标签最终由对端的BGP弹出,ldp分配的栈顶标签则是“后进先出”的标签,就像C语言中if语句与else语句之间的等价对应匹配的规则一样。

 

转载于:https://www.cnblogs.com/jinhengyu/p/7516567.html

你可能感兴趣的文章
explode and implode
查看>>
UCenter Home与站长的SNS梦想
查看>>
浅析新建Oracle数据库的三种方法
查看>>
Jmeter性能测试之进阶BeanShell的使用
查看>>
MFC图形图像
查看>>
eclipse、idea切换大小写的快捷键
查看>>
NGUI系列教程一
查看>>
Amazon Route 53
查看>>
爬虫系列(十三) 用selenium爬取京东商品
查看>>
吴裕雄--天生自然 R语言数据可视化绘图(1)
查看>>
手工实现HttpBasic校验
查看>>
Socket网络编程--聊天程序(2)
查看>>
C++中类模板的深入理解
查看>>
gDebugger 4.0 破解
查看>>
转载-Prim,Kruscal,dijkstra
查看>>
使用Eclipse Memory Analyzer进行内存泄漏分析三部曲
查看>>
连接mysql 出现 1005 error(150) , error(121)的错误
查看>>
当mysql报错1045时的解决方法
查看>>
sql server 行列互转
查看>>
浅谈JSONObject,GSON解析JSON
查看>>