什么是堆栈的意思概念介绍对比分析
在计算机领域,堆栈是一个不容忽视的概念,堆栈是两种数据结
构。那么你对堆栈了解多少呢?以下是由店铺整理关于什么是堆栈的内
容,希望大家喜欢!
什么是堆栈
堆栈是一个在计算机科学中经常使用的抽象数据类型。堆栈中的
物体具有一个特性:最后一个放入堆栈中的物体总是被最先拿出来,
这个特性通常称为后进先出(LIFO)队列。堆栈中定义了一些操作。两
个最重要的是PUSH和POP。PUSH操作在堆栈的顶部加入一个元
素。POP操作相反,在堆栈顶部移去一个元素,并将堆栈的大小减一。
在计算机领域,堆栈是一个不容忽视的概念,堆栈是两种数据结
构。堆栈都是一种数据项按序排列的数据结构,只能在一端(称为栈顶
(top))对数据项进行插入和删除。在单片机应用中,堆栈是个特殊的存
储区,主要功能是暂时存放数据和地址,通常用来保护断点和现场。
要点:堆,队列优先,先进先出(FIFO—firstinfirstout)。栈,先进后
出(FILO—First-In/Last-Out)。
堆栈对比分析
堆栈空间分配
栈(操作系统):由操作系统自动分配释放,存放函数的参数值,
局部变量的值等。其操作方式类似于数据结构中的栈。
堆(操作系统):一般由程序员分配释放,若程序员不释放,程序
结束时可能由OS回收,分配方式倒是类似于链表。
堆栈缓存方式
栈使用的是一级缓存,他们通常都是被调用时处于存储空间中,
调用完毕立即释放。
堆则是存放在二级缓存中,生命周期由虚拟机的垃圾回收算法来
决定(并不是一旦成为孤儿对象就能被回收)。所以调用这些对象的速度
要相对来得低一些。
堆栈数据结构区别
堆(数据结构):堆可以被看成是一棵树,如:堆排序。
栈(数据结构):一种先进后出的数据结构。
例如:顺序栈AStack的类定义
template
classAStack{
private:
intsize;//数组的规模
T*stackArray;//存放堆栈元素的数组
inttop;//栈顶所在数组元素的下标
public:
AStack(intMaxStackSize)//构造函数
{size=MaxStackSize;stackArray=newT[MaxStackSize];
top=-1;}
~AStack(){delete[]stackArray;}//析构函数
boolPush(constT&item);//向栈顶压入一个元素
boolPop(T&item);//从栈顶弹出一个元素
boolPeek(T&item)const;//存取栈顶元素
intIsEmpty(void)const{returntop==-1;}
//检测栈是否为空
intIsFull(void)const{returntopsize-1;}
//检测栈是否为满
voidclear(void){top-1;}//清空栈
};
堆栈申请方式
stack:
由系统自动分配。例如,声明在函数中一个局部变量intb;系统
自动在栈中为b开辟空间
heap:
需要程序员自己申请,并指明大小,在c中malloc函数
如p1=(char*)malloc(10);
在C++中用new运算符
如p2=newchar[10];//(char*)malloc(10);
但是注意p1、p2本身是在栈中的。
堆栈申请响应
栈:只要栈的剩余空间大于所申请空间,系统将为程序提供内存,
否则将报异常提示栈溢出。
堆:首先应该知道操作系统有一个记录空闲内存地址的链表,当
系统收到程序的申请时,会遍历该链表,寻找第一个空间大于所申请
空间的堆结点,然后将该结点从空闲结点链表中删除,并将该结点的
空间分配给程序,另外,对于大多数系统,会在这块内存空间中的首
地址处记录本次分配的大小,这样,代码中的delete语句才能正确的
释放本内存空间。另外,由于找到的堆结点的大小不一定正好等于申
请的大小,系统会自动的将多余的那部分重新放入空闲链表中。
堆栈申请限制
栈:在Windows下,栈是向低地址扩展的数据结构,是一块连续
的内存的区域。这句话的意思是栈顶的地址和栈的最大容量是系统预
先规定好的,在WINDOWS下,栈的大小是2M(也有的说是1M,总
之是一个编译时就确定的常数),如果申请的空间超过栈的剩余空间时,
将提示overflow。因此,能从栈获得的空间较小。
堆:堆是向高地址扩展的数据结构,是不连续的内存区域。这是
由于系统是用链表来存储的空闲内存地址的,自然是不连续的,而链
表的遍历方向是由低地址向高地址。堆的大小受限于计算机系统中有
效的虚拟内存。由此可见,堆获得的空间比较灵活,也比较大。
本文发布于:2022-11-24 01:53:55,感谢您对本站的认可!
本文链接:http://www.wtabcd.cn/fanwen/fan/90/9145.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |