C语言中内存堆和栈的区别是什么?
展开全部
比较简单的理解是堆要靠自己管理,栈是系统帮你管理的,一般堆空间很大适合放大型的数据结构,栈空间有限一般仅仅放是函数的参数和内部的临时变量
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
给你写个小例子说明吧,一个小函数。
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指向的内存就无法被释放了,造成内存泄露。
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指向的内存就无法被释放了,造成内存泄露。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询