C语言中内存堆和栈的区别

 我来答
水主沉浮6s
2014-11-04 · TA获得超过349个赞
知道小有建树答主
回答量:241
采纳率:0%
帮助的人:206万
展开全部
给你写个小例子说明吧,一个小函数。
void testFunction()
{
int a = 0;
int* pA = null;
a = 2;
pA = (int *)malloc(3*sizeof(int));
return;
}
上面函数中,变量a的内存就在栈中,a的生命周期只在大括号内,出了testFunction的大括号这块栈空间就被释放了。
而上面函数通过调用malloc函数给pA分配了3*sizeof(int)个字节长度的内存,这段内存就在堆中。
即使出了testFunction函数的大括号,这段内存也依然被占用着。不过,由于pA这个指针的生命周期 出了大括号就结束了,所以无法再用pA来引用这块内存了。

上面只是举例,真正编程不会这样写,这样pA指向的内存就无法被释放了,造成内存泄露。
文正153
2014-11-04 · TA获得超过2.1万个赞
知道大有可为答主
回答量:2221
采纳率:63%
帮助的人:616万
展开全部
堆内存是用malloc或new分配的内存空间,栈是用关键字定义出变量的内存空间.有些时候必须用堆内存,如:链表.堆最好是用来存放大数据.而栈本身就小,但速度快.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友d580670
2014-11-04 · TA获得超过1983个赞
知道大有可为答主
回答量:2054
采纳率:82%
帮助的人:685万
展开全部
比较简单的理解是堆要靠自己管理,栈是系统帮你管理的,一般堆空间很大适合放大型的数据结构,栈空间有限一般仅仅放是函数的参数和内部的临时变量
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式