什么是堆栈?--九五小庞

版权
堆栈(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语句之间的等价对应匹配的规则一样。
————————————————
版权声明:本文为CSDN博主「xosg」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zipack/article/details/77833808

posted @ 2022-06-27 14:47  九五小庞  阅读(149)  评论(0编辑  收藏  举报