- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
程序设计中的Stack详解
Stack的三种含义
作者: 阮一峰
学习编程的时候,经常会看到stack这个词,它的中文名字叫做栈。
理解这个概念,对于理解程序的运行至关重要。容易混淆的是,这个词其实有三种含义,适用于不同的场合,必须加以区分。
含义一:数据结构
stack的第一种含义是一组数据的存放方式,特点为LIFO,即后进先出(Last in, first out)。
在这种数据结构中,数据像积木那样一层层堆起来,后面加入的数据就放在最上层。使用的时候,最上层的数据第一个被用掉,这就叫做后进先出。
与这种结构配套的,是一些特定的方法,主要为下面这些。
push:在最顶层加入数据。
pop:返回并移除最顶层的数据。
top:返回最顶层数据的值,但不移除它。
isempty:返回一个布尔值,表示当前stack是否为空栈。
含义二:代码运行方式
stack的第二种含义是调用栈(call stack),表示函数或子例程像堆积木一样存放,以实现层层调用。
下面以一段Java代码为例(来源)。
上面这段代码运行的时候,首先调用main方法,里面需要生成一个Student的实例,于是又调用Student构造函数。在构造函数中,又调用到setName方法。
这三次调用像积木一样堆起来,就叫做调用栈。程序运行的时候,总是先完成最上层的调用,然后将它的值返回到下一层调用,直至完成整个调用栈,返回最后的结果。
含义三:内存区域
stack的第三种含义是存放数据的一种内存区域。程序运行的时候,需要内存空间存放数据。一般来说,系统会划分出两种不同的内存空间:一种叫做stack(栈),另一种叫做heap(堆)。
它们的主要区别是:stack是有结构的,每个区块按照一定次序存放,可以明确知道每个区块的大小;heap是没有结构的,数据可以任意存放。因此,stack的寻址速度要快于heap。
其他的区别还有,一般来说,每个线程分配一个stack,每个进程分配一个heap,也就是说,stack是线程独占的,heap是线程共用 的。此外,stack创建的时候,大小是确定的,数据超过这个大小,就发生stack overflow错误,而heap的大小是不确定的,需要的话可以不断增加。
根据上面这些区别,数据存放的规则是:只要是局部的、占用空间确定的数据,一般都存放在stack里面,否则就放在heap里面。请看下面这段代码(来源)。
上面代码的Method1方法,共包含了三个变量:i, y 和 cls1。其中,i和y的值是整数,内存占用空间是确定的,而且是局部变量,只用在Method1区块之内,不会用于区块之外。cls1也是局部变量,但 是类型为指针变量,指向一个对象的实例。指针变量占用的大小是确定的,但是对象实例以目前的信息无法确知所占用的内存空间大小。
这三个变量和一个对象实例在内存中的存放方式如下。
从上图可以看到,i、y和cls1都存放在stack,因为它们占用内存空间都是确定的,而且本身也属于局部变量。但是,cls1指向的对象实例存放在heap,因为它的大小不确定。作为一条规则可以记住,所有的对象都存放在heap。
接下来的问题是,当Method1方法运行结束,会发生什么事?
回答是整个stack被清空,i、y和cls1这三个变量消失,因为它们是局部变量,区块一旦运行结束,就没必要再存在了。而heap之中的那 个对象实例继续存在,直到系统的垃圾清理机制(garbage collector)将这块内存回收。因此,一般来说,内存泄漏都发生在heap,即某些内存空间不再被使用了,却因为种种原因,没有被系统回收。
您可能关注的文档
- 登洛杉矶西部福朋喜来登酒店(FourPointsbySheratonLosAngelesWestside).docx
- 白箬中学高三数学第二轮专题讲座复习综合运用等价转化、分类讨论、数形结合等思想解决函数综合问题.doc
- 白内障论文:视功能指数量表(Vf14)的修订及评价.doc
- 白金管弦乐铜管.doc
- 百科测试题(九).docx
- 的组合和加法.doc
- 百达翡丽5951P自动上链腕表.doc
- 皇后镇康梦妮及别墅酒店(CommonageVillas).docx
- 监控系统技术部分2.doc
- 盘点那些经典的飞行腕表.doc
- 2025年脑机接口辅助视力康复伦理边界探索与应用前景分析.docx
- 中国宠物领养现状与趋势研究报告:2025年宠物经济发展白皮书解析.docx
- 2025年社区体育公园跨境运动数据共享平台在健身器材行业标准化建设中的应用.docx
- 2025年神经外科医疗器械国产化替代现状及市场分析报告.docx
- 2025年脑机接口伦理审查在数字货币交易中的应用报告.docx
- 2025年生物科技临床试验药物临床试验监管动态分析.docx
- 元宇宙技术在2025年教师培训中的应用与发展报告.docx
- 新能源汽车电池回收环保政策法规影响评估报告.docx
- 2025年生鲜零售行业供应链优化与损耗控制政策法规研究报告.docx
- 元宇宙社交平台隐私保护技术标准与实施路径分析报告.docx
最近下载
- 企业采购管理蔬菜采购验收标准DOC56页.pdf VIP
- 2025年云南省中考物理试题卷(含答案解析).docx
- 体温测量软件GBT 25000.51-2016自测报告.docx VIP
- WS∕T 225-2024 临床化学检验血液标本的采集与处理.pdf
- 信息系统的使用与维护管理办法.doc VIP
- 环境影响评价报告公示大理州永平县汽车客运站环境影响评价报告表环评报告.doc VIP
- 2022年1月广东自考《07114现代物流学》试题和答案 .pdf VIP
- Unit 1 Happy Holiday(大单元教学设计)英语人教版2025八年级上册.pdf
- 2025年军队文职人员公开招录《管理学》真题库(含答案).pdf VIP
- 网络数据安全检查项及检查方法.docx VIP
文档评论(0)