社区
C语言
帖子详情
问:堆和栈 的区别在哪里?
searoom
2005-03-23 10:25:03
堆和栈 的区别在哪里?
哪些变量会在栈中分配空间,哪些变量会在堆中分配空间?
...全文
499
22
打赏
收藏
问:堆和栈 的区别在哪里?
堆和栈 的区别在哪里? 哪些变量会在栈中分配空间,哪些变量会在堆中分配空间?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
22 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
yhq520
2005-04-03
打赏
举报
回复
在存储的物理意义上是不样的
xjp6688
2005-03-27
打赏
举报
回复
这个比较详细了,应该加入FAQ,哈哈
yearn1900
2005-03-27
打赏
举报
回复
名称不同
panwai
2005-03-27
打赏
举报
回复
学习!
williamVII
2005-03-26
打赏
举报
回复
good question
surstar
2005-03-26
打赏
举报
回复
都回答很全了,学习~
dongpy
2005-03-26
打赏
举报
回复
堆和栈 的区别在哪里?
======================================================================================
堆和栈是编译器划分的内存空间。
栈上分配的内存,编译器会自动收回;堆上分配的内存,要通过free来显式地收回。
哪些变量会在栈中分配空间,哪些变量会在堆中分配空间?
=======================================================
函数局部变量、参数,一些临时对象都在栈中分配空间。
用malloc、calloc等申请的内存在堆中分配。
nodummy
2005-03-26
打赏
举报
回复
回复人: EnochShen(小疯子:真的好菜—知耻而后勇!) ( ) 信誉:106
=============================
新一代的抢分狂……VC/MFC抢到2星了居然还跑到C/C++来抢……
sankt
2005-03-26
打赏
举报
回复
学习
nodummy
2005-03-26
打赏
举报
回复
堆和栈其实是两种数据结构……
只不过系统的进程空间管理引用了这两种结构,所以空间被分成了堆和栈……
Student02370236
2005-03-26
打赏
举报
回复
栈空间的分配通常要受到操作系统的限制,因为栈的分配是从高地址到底地址;而堆空间的分配是从底地址到高地址,所以一般不会受到限制。虽然栈的空间有限,但是其访问速度比堆快,而堆的使用更为灵活...
gnixemos
2005-03-26
打赏
举报
回复
所以递归函数中局部内存也申请在堆上
或者可以的话用静态变量
gnixemos
2005-03-26
打赏
举报
回复
递归是容易出现栈溢出的情况
如果函数中分配内存的话
gnixemos
2005-03-26
打赏
举报
回复
栈可以扩大
vc 编译选项中可以设置,其实就是一个 /STACK参数
缺省2M
searoom
2005-03-26
打赏
举报
回复
有个疑惑哦:如果栈那么小,那使用递归函数不是很容易就撑破了么?比如递归循环个几千次
rocklabzhang
2005-03-26
打赏
举报
回复
老问题
经典的问题
领分
cssport2000
2005-03-26
打赏
举报
回复
不是很清楚区别啊!
数据结构与算法学习、智能算法
2005-03-26
打赏
举报
回复
栈是系统自动为之分配的,例如当在调用涵数时,需要保存的变量,最明显的是在递归调用时,要系统自动分配一个栈的空间,后进先出的,而后又由系统释放这个空间,
堆是自已申请自已释放,如p1 = (char *)malloc(10);
在C++中用new运算符
如p2 = (char *)malloc(10);
栈:只要栈的剩余空间大于所申请空间,系统将为程序提供内存,否则将报异常提示栈溢出。
堆:首先应该知道操作系统有一个记录空闲内存地址的链表,当系统收到程序的申请时,
会遍历该链表,寻找第一个空间大于所申请空间的堆结点,然后将该结点从空闲结点链表中删除,并将该结点的空间分配给程序,另外,对于大多数系统,会在这块内存空间中的首地址处记录本次分配的大小,这样,代码中的delete语句才能正确的释放本内存空间。另外,由于找到的堆结点的大小不一定正好等于申请的大小,系统会自动的将多余的那部分重新放入空闲链表中。
zhousqy
2005-03-26
打赏
举报
回复
動態分配的內存在堆里。
lj197912
2005-03-26
打赏
举报
回复
局部变量,函数形参是存储在栈上的,由系统帮你管理
程序员通过new分配的内存,是在堆上的,要由自己用delete来释放
加载更多回复(2)
面试中经常
问
到的C++中的
区别
与联系
### C++中数组与链表的
区别
与联系 #### 一、基本概念介绍 在C++编程语言中,数组和链表都是用来存储一系列相同类型数据的容器,它们各自有着独特的特性...同时,了解
堆
和
栈
的不同特点也有助于更高效地管理内存资源。
java面试-JVM+多线程三个版本面试题,全集.zip
Java虚拟机(JVM)和多线程是Java开发者必须掌握的重要概念,它们在面试中经常被
问
到,尤其对于高级职位来说更是如此。这份"java面试-JVM+多线程三个版本面试题,全集.zip"包含了针对这两个主题的全面
问
题集,旨在...
C#基础概念二十五
问
16-20
答: 类: 类是引用类型在
堆
上分配,类的实例进行赋值只是复制了引用,都指向同一段实际对象分配的内存 类有构造和析构函数 类可以继承和被继承 结构: 结构是值类型在
栈
上分配(虽然
栈
的访
问
速度比较
堆
要快,但
栈
...
【JVM】Java内存详解:
堆
和
栈
的
区别
又回到了
堆
和
栈
这个话题,在很早之前就研究过,只知道这两种数据结构一个是先进后出,一个是先进先出,借这个机会,再细致研究一下,对比二者的不同: Java把内存划分为两种:一种是
栈
内存,一种是
堆
内存。在函数中...
问
:既然
栈
中可以存储数据,为什么还要区分
堆
和
栈
?
堆
和
栈
在计算机科学中明确区分,以满足不同数据存储需求,提高内存效率。
栈
自动分配连续内存,适用于函数调用等;
堆
手动分配离散内存,适用于动态分配。两者在分配方式、访
问
速度、生命周期等方面存在差异,各有应用...
C语言
70,020
社区成员
243,264
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章