1. 首页 > 小常识

堆和栈的区别

  堆和栈的区别是栈:由操作系统自动分配释放 ,存放函数的参数值,局部变量的值的。

  那么关于堆和栈的区别以及堆和栈的区别和联系,堆和栈的区别先进先出,java堆和栈的区别,java堆和栈分别存放什么,c++ 堆和栈的区别等问题,小编将为你整理以下的知识答案:

堆和栈的区别

堆和栈的区别

  堆和栈的区别是栈:由操作系统自动分配释放 ,存放函数的参数值,局部变量的值。其操作方式类似于数据结构中的栈。堆: 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表的。

在计算机领域,堆栈绝对是一个不容忽视的概念,并且在编写C 语言程序的时候也会频繁用到。

  但对大多数 C 语言初学者来说,堆栈却是一个很模糊的概念。

  那么堆和栈的区别是什么?

空间分配区别

栈(操作系统):由操作系统(编译器)自动分配释放,存放函数的参数值,局部变量的值等。

  其操作方式类似于数据结构中的栈。

  堆(操作系统):一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表。

堆栈缓存方式区别

栈使用的是一级缓存,它们通常都是被调用时处于存储空间中,调用完毕立即释放。

  堆则是存放在二级缓存中,生命周期由虚拟机的垃圾回收算法来决定(并不是一旦成为孤儿对象就能被回收)。

  所以调用这些对象的速度要相对来得低一些。

堆栈数据结构区别

堆(数据结构):堆可以被看成是一棵树,如:堆排序。

  栈(数据结构):一种先进后出的数据结构。

堆和栈的区别

  1、管理方式不同

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

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

  2、生长方式不同

  堆是向高地址扩展也就是常说的向上生长。

  是不连续的内存区域。

  栈是向低地址扩展也就是常说的向下生长。

  是连续的内存区域。

  3、空间大小不同

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

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

  4、内存速率不同

  栈的内存速率较快。

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

  堆因为是程序员分配内存,而且是由C/C++函数库提供的。

  而且机制比较复杂,为了找打到一块合适大小的内存区域会挨个遍历。

  所以耗时也就比较多些。

  5、存储内容不同

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

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

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

版权声明:本文来源于互联网,不代表本站立场与观点,子健常识网无任何盈利行为和商业用途,如有错误或侵犯利益请联系我们。

联系我们

在线咨询:点击这里给我发消息

微信号:79111873