堆和栈的区别
1个回答
展开全部
1、管理方式不同
堆是由程序员通过调用系统库函数来管理内存,所以管理不力就会出现常说的内存泄漏。
栈是由计算机系统分配内存而且系统有专门的寄存器存储栈指针。
2、生长方式不同
堆是向高地址扩展也就是常说的向上生长。是不连续的内存区域。
栈是向低地址扩展也就是常说的向下生长。是连续的内存区域。
3、空间大小不同
堆的大小可以高达4G在32位Linux里系统有效的虚拟内存也有3.2G。
栈的大小一般是1M ~10M不等(和堆相差很多)。
4、内存速率不同
栈的内存速率较快。前面说了 栈是系统分配内存 ,而且有这FILO的出栈顺序 所以栈的内存速率快些。
堆因为是程序员分配内存,而且是由C/C++函数库提供的。而且机制比较复杂,为了找打到一块合适大小的内存区域会挨个遍历。所以耗时也就比较多些。
5、存储内容不同
栈在函数调用时,首先压入主调函数中下条指令(函数调用语句的下条可执行语句)的地址,然后是函数实参,然后是被调函数的局部变量。
本次调用结束后,局部变量先出栈,然后是参数,最后栈顶指针指向最开始存的指令地址,程序由该点继续运行下条可执行语句。
堆通常在头部用一个字节存放其大小,堆用于存储生存期与函数调用无关的数据,具体内容由程序员安排。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询