堆栈与堆有什么区别?

程序的局部变量存在于(堆栈)中,全局变量存在于(静态区)中,动态申请数据存在于(堆)中。上面说的堆栈与堆有什么区别?还有栈和他们二者又有什么区别?伊·梵那为什么两个括号里... 程序的局部变量存在于(堆栈)中,全局变量存在于(静态区 )中,动态申请数据存在于( 堆)中。

上面说的堆栈与堆有什么区别? 还有栈和他们二者又有什么区别?
伊·梵 那为什么 两个括号里面不都写栈或者都写堆栈?
我看过好多这样的题,都是一个括号里面写堆栈 一个里面写栈
展开
 我来答
仁昌爱娱乐
高粉答主

2019-11-11 · 专注关心娱乐
仁昌爱娱乐
采纳数:760 获赞数:459834

向TA提问 私信TA
展开全部

堆栈与堆区别为:空间不同、地址方向不同、释放不同。

一、空间不同

1、堆栈:堆栈是自动分配变量,以及函数调用的时候所使用的一些空间。

2、堆:堆是是由malloc之类函数分配的空间所在地。

二、地址方向不同

1、堆栈:堆栈的地址方向是由高向低减少性扩展,有总长度大小限制。 

2、堆:堆的地址方向是由低向高增长性扩展,没有总长度大小限制。 

三、释放不同

1、堆栈:堆栈由编译器自动释放,存放函数的参数值,局部变量的值等。

2、堆:堆由程序员人工进行释放, 若程序员不释放,程序结束时可能由OS回收 。

wormszm
推荐于2017-11-26 · 超过12用户采纳过TA的回答
知道答主
回答量:31
采纳率:0%
帮助的人:43万
展开全部
程序的局部变量存在于(栈)中,全局变量存在于(静态区 )中,动态申请数据存在于( 堆)中

这样说比较准确,所谓的栈其实是由寄存器ebp和esp指向的一片内存空间(ebp指向栈底,esp指向栈顶),原则上是由高地址向低地址生长的一片空间,会保存一些临时的数据,比如一个函数中的临时变量以及返回地址,数据的出入是先进后出,后进先出.

全局变量实际上是存在一个(一般来说正常的编译器)可读可写的内存空间,这个空间是在你写程序编译好的空间地址(由编译器决定),是固定的.

堆是由操作系统管理的一片空间,事先是没有在进程空间里分配的(比如你在没有分配堆的时候就访问堆空间会报一个内存访问错误),一般是由程序动态的分配出来,一旦分配了以后,一般需要程序去释放自己的堆空间.

这只是简单的描述一下概念,如果要深入讲这三个空间的结构还是有些复杂度的
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
税兴有呼鹃
2020-05-17 · TA获得超过3.7万个赞
知道大有可为答主
回答量:1.2万
采纳率:32%
帮助的人:1156万
展开全部
在一块用的“堆栈”其实就是栈区,堆和栈都是来存储数据的,只是存储数据的位置和生命期不一样。区别:在程序中,在栈区申请的资源只是在某一函数模块中有效,函数返回栈区资源就会被收回,在堆区中对于整个程序有效,程序结束在堆区的资源会被收回。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
伊·梵beec
2009-01-05 · TA获得超过2160个赞
知道大有可为答主
回答量:1897
采纳率:0%
帮助的人:1376万
展开全部
这里的堆栈就是栈的意思,栈是堆栈的简称

堆和栈的区别可以参考数据结构

提问题之前,最好先搜索一下答案:
http://zhidao.baidu.com/question/23460519.html
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lileyear
2009-01-05 · TA获得超过1499个赞
知道小有建树答主
回答量:1291
采纳率:0%
帮助的人:913万
展开全部
stack堆栈,
global stack全局堆栈,
heap堆;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式