堆和栈的区别

 我来答
一莲爱教育
高能答主

2022-11-02 · 答题姿势总跟别人不同
知道大有可为答主
回答量:7174
采纳率:100%
帮助的人:110万
展开全部

1、管理方式不同

堆是由程序员通过调用系统库函数来管理内存,所以管理不力就会出现常说的内存泄漏。

栈是由计算机系统分配内存而且系统有专门的寄存器存储栈指针。

2、生长方式不同

堆是向高地址扩展也就是常说的向上生长。是不连续的内存区域。

栈是向低地址扩展也就是常说的向下生长。是连续的内存区域。


3、空间大小不同

堆的大小可以高达4G在32位Linux里系统有效的虚拟内存也有3.2G。

栈的大小一般是1M ~10M不等(和堆相差很多)。

4、内存速率不同

栈的内存速率较快。前面说了 栈是系统分配内存 ,而且有这FILO的出栈顺序 所以栈的内存速率快些。

堆因为是程序员分配内存,而且是由C/C++函数库提供的。而且机制比较复杂,为了找打到一块合适大小的内存区域会挨个遍历。所以耗时也就比较多些。

5、存储内容不同

栈在函数调用时,首先压入主调函数中下条指令(函数调用语句的下条可执行语句)的地址,然后是函数实参,然后是被调函数的局部变量。

本次调用结束后,局部变量先出栈,然后是参数,最后栈顶指针指向最开始存的指令地址,程序由该点继续运行下条可执行语句。

堆通常在头部用一个字节存放其大小,堆用于存储生存期与函数调用无关的数据,具体内容由程序员安排。

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式