问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
你好,欢迎来到懂视!登录注册
当前位置: 首页 - 正文

什么事堆栈,堆栈有哪些运算,堆栈怎样存储

发布网友 发布时间:2022-03-28 00:55

我来回答

1个回答

热心网友 时间:2022-03-28 02:25

stack,其实就是一块内存空间,关键在于他的用途.
1.对于程序指令来说
执行exe时,程序都会默认分配1M堆栈空间,vs2008等开发软件都可以进行调整实际大小.
指令变成一条条机器码,cpu会一条条执行.
例子:
xxxxxxx
call 0x403650 <- --
yyyyy
在执行call命令时,cpu会把下一条指令地址写入堆栈地址空间中,当然也包括其他信息.
0x403650相当于一个子程序的地址,完事后,必然有一个ret之类的指令.这时,cpu根据先前保存的地址,也就是yyyyy这条指令所对应的地址.这样就能继续往下执行了.
关于这一点,用ollydbg好好玩一下,马上就清楚了.

2.一般的应用程序编写.
我们在编写程序时,有时采用堆栈结构,有时采用队列结构,这跟所采用的算法有很大关系.
最常见的递归算法,按递归展开的话,所有的细节就跟第1点完全一样,好处是,大都程序员根本不关心象第1点所描述的细节.只知道其调用过程和最终执行结果.具体细节可能就不关心了.

当把递归算法 用非递归算法写时,很可能你就要引入堆栈结构(其实就是人为手动申请一个内存空间,比如buffer[递归最深层数], 这样,就可以编写出直观的顺序结构的代码. cpu也不用着因调用子程序,一次次把相关信息写入系统的堆栈中(第1点所说)..因为buffer[]的存在就是为了避免这种情况.

--------------------
stack最常用两种操作,push和pop. 你可以用c或是c++ 标准库提供的实现.
如果不是大工程,基本上没必要这么做.
搞个数组 buf[], 再搞个索引变量int index,用来指示top位置. 写入数据时,index++,取出数据时index--

3.最常用的,但易忽略的.
平常所说的,局部变量就是在堆栈中分配的.所以他出了作用域就自动释放了.
c语言很容易理解,不容易出错.
但c++中,编译器有不同的策略.
比如
CTeacher t= bar();
--
CTeacher bar()
{
CTeacher xx;
为CTeacher的成员赋值
return xx.
}
你一定为这里xx对象是局部变量,出了函数作用域,对应的内存主释放了.
CTeacher t= bar();
因为bar()是返回一个Cteacher对象,所以这里就要执行拷贝构造函数,
你会奇怪,问题是bar()返回的对象是无效的.但执行却不会出错.
为什么?
首先对堆栈的理解是对.只是c++编译器内部会改写bar()这个函数.
变成 void bar(CTeacher& tmp)
这样,t就作为引用参数传入了,函数内部创建临时对象,然后赋值给引用对象就成了.结果当然正确了.

4. 是第2点的延伸,相当重要.
一些大的应用工程,往往配合堆来对内存进行管理.
以后你接触一些第三方程序,一定会奇怪,要动态申请内存,直接new或malloc一个对象不就行了么,为什么要这么麻烦.
其中一个重要原因:减少碎片,提高内存使用效率.
你先申请大的空间(new/malloc),然后借助stack的特性来管理和控制这块空间!!!
-------------------------------

ps:理解到这几层差不多够用了
什么事堆栈,堆栈有哪些运算,堆栈怎样存储

stack,其实就是一块内存空间,关键在于他的用途.1.对于程序指令来说 执行exe时,程序都会默认分配1M堆栈空间,vs2008等开发软件都可以进行调整实际大小.指令变成一条条机器码,cpu会一条条执行.例子:xxxxxxx call 0x403650 &lt;- -- yyyyy 在执行call命令时,cpu会把下一条指令地址写入堆栈地址空间中,当然...

非结构化数据如何可视化呈现?

通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准...

什么是堆栈?堆栈有何作用?

堆栈其实是数据结果中的两个概念 ,是存放数据的方式,堆:顺序随意;栈:后进先出(Last-In/First-Out)。要说用处,那就是在写代码的时候,有时数据存取肯定是要有规定的顺序的,这个是你自己规定的,然后按照你所写程序的用处的特点来用堆还是栈还是队列之类的顺序 ...

什么是堆栈?堆栈的操作方式有哪两种?

堆栈是一种执行“后进先出”算法的数据结构。堆栈就是这样一种数据结构。它是在内存中开辟一个存储区域,数据一个一个顺序地存入(也就是“压入——push”)这个区域之中。有一个地址指针总指向最后一个压入堆栈的数据所在的数据单元,存放这个地址指针的寄存器就叫做堆栈指示器。开始放入数据的单元叫做...

什么是堆栈?堆栈有什么用途?

类似于队列,堆栈是个简单的数据存储结构。堆栈中数据进出的顺序很重要,举个例子,餐厅的盘子堆,盘子洗完要堆到上面,而不是插到下面的某个位置(相信不会有人那么做)。当厨师要用到盘子时从最上面的开始拿。即最先放在堆里的盘子会被最后一个用到。定义:堆栈就是只能在一端插入和删除数据的链...

堆栈的存储方式

堆栈 堆栈是一个在计算机科学中经常使用的抽象数据类型。堆栈中的物体具有一个特性: 最后一个放入堆栈中的物体总是被最先拿出来, 这个特性通常称为后进先处(LIFO)队列. 堆栈中定义了一些操作. 两个最重要的是PUSH和POP。 PUSH操作在堆栈的顶部加入一 个元素。POP操作相反, 在堆栈顶部移去一个元素...

什么是堆栈及堆栈的作用是什么

在计算机领域,堆栈是一个不容忽视的概念,堆栈是两种数据结构。堆栈都是一种数据项按序排列的数据结构,只能在一端(称为栈顶(top))对数据项进行插入和删除。在单片机应用中,堆栈是个特殊的存储区,主要功能是暂时存放数据和地址,通常用来保护断点和现场。要点:堆,队列优先,先进先出 。栈,先进后...

堆栈 在C语言中看到的,是什么东西啊.有什么作用啊,怎么用?

“堆栈”实际上是分为两部分:堆是指系统可以动态申请和释放的一部分究竟,这部分是可以用代码进行操作的。栈是函数之间调度所使用的一部分空间,这部分在代码上没有明显的表示。对于堆来与,可以使用malloc、realloc语句进行申请空间,通常情况下申请得到的是堆空间中的一块区域,而通常情况下定义的数组也...

什么是“堆”,"栈","堆栈","队列",它们的区别

④堆是指程序运行时申请的动态内存,而栈只是指一种使用堆的方法(即先进后出)。栈:什么是栈?又该怎么理解呢?①栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。②栈就是一个桶,后放进去的先...

为什么要用堆栈,什么是堆栈

堆:一般是在堆的头部用一个字节存放堆的大小。堆中的具体内容有程序员安排。2.6存取效率的比较 char s1[] = "aaaaaaaaaaaaaaa";char *s2 = "bbbbbbbbbbbbbbbbb";aaaaaaaaaaa是在运行时刻赋值的;而bbbbbbbbbbb是在编译时就确定的;但是,在以后的存取中,在栈上的数组比指针所指向的字符串(...

80486中,什么是堆栈?堆栈主要应用在哪些场合?

堆栈是一种数据项按序排列的数据结构,只能在一端(称为栈顶(top))对数据项进行插入和删除。堆栈主要应用在:暂时存放数据和地址。对这个存储区存入的数据,是一种特殊的数据结构。所有的数据存入或取出,只能在浮动的一端(称栈顶)进行,严格按照“先进后出”的原则存取,位于其中间的元素,必须在其...

声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com
有没有人知道海尔董事长的电话 学科思政属于专硕还是学硕 炒锅品牌 是什么呢 有在ubc读商科的前辈嘛??? 哪里有这个黑标七星这款呢? 咨询下,这烟多少价位,是否有爆珠 梦见失钱包的预兆 ...E:\Spider-Man(TM)-Shattered Dimensions\d3dx9_43.dll 为无效的W... 蜘蛛侠破碎维度怎么安装? 是一个文件夹 SpiderManShatteredDimensions... 滑片产生原因 数据结构中的栈的存储结构 在java编写的程序中,栈内存跟堆内存分别存储的是什么呢? 在什么情况下可以用栈来存储数据? Java中 堆空间与栈空间,有什么区别,一般存什么数据? 栈的顺序存储是什么? 堆栈区一般都存储哪些内容?80C51单片机的哪一块存储区要分出一些作为堆栈区使用? C语言堆 栈各存放什么数据 指针是放到栈里面的 其他那些呢 。。 java 哪些数据存放在栈中哪些存放在堆中 堆和栈分别用于保存什么? java 堆栈 里面存的都是些什么 堆栈一般用来存放什么内容 栈的存储结构 为什么我的港版iphone6在app store里面搜不到喜马拉雅fm 我的喜马拉雅年卡在换苹果手机上没了 苹果手机可以下哪种喜马拉雅听书 苹果手机可以下哪种喜马拉雅听书? 苹果电脑不支持喜马拉雅藏文输入法吗 怎么苹果里搜不到喜马拉雅听书了,什么情况? 苹果商店的喜马拉雅电台为什么没有了 苹果电脑不支持喜马拉雅藏文输入法吗? JAVA对象分步实例化中栈内存存放什么? 什么是栈存储区 手机8gb 128gb是什么意思? 电脑上的I7/8GB/128GB/1TB什么意思? 8GB+128GB跟6GB+265GB的区别 华为机身内存8GB RAM&#10133;128GBROM是什么意思? 电脑的25cd:i5/8gb/128gb+1tb什么意思? 手机标注的8与125是什么内存? 苹果电脑13.3/2.7ghz/8gb/128gb是什么意思 荣耀x20se手机运行内存8十2GB是什么意思? OPPO手机8gb 128gb好还是6gb 256gb好用 8GB+128GB多上钱 vivo S7 8GB 128GB版本8GB 256GB版本区别? 小米9的6GB+128GB和8GB+128GB相比有多大区别? 手机视频投到电视上后,手机还要开着吗? 用电视果投屏观看视频时,手机也要一直播放视频吗? 小米电视投屏手机必须一直开着吗 为什么手机投屏然后那个为什么手机投屏 然后那个手机一直要开着? 苹果手机使用屏幕镜像投电视,手机必须一直亮着吗?不能锁屏吗,很费电的 手机视频投到电视上面后 要一直开着手机吗 还是关闭就行
  • 焦点

最新推荐

猜你喜欢

热门推荐