堆和堆之间的区别

作者: Laura McKinney
创建日期: 1 四月 2021
更新日期: 13 可能 2024
Anonim
堆和栈的区别是什么?
视频: 堆和栈的区别是什么?

内容


堆栈和堆是内存分配技术中使用的内存段。堆栈与堆之间的主要区别在于,堆栈涉及线性和顺序分配的内存,该内存用于静态内存分配,而堆栈则充当随机分配内存(动态内存分配)的存储区池。

速度是区分堆栈和堆的主要参数。堆栈要比堆快得多。

  1. 比较表
  2. 定义
  3. 关键差异
  4. 结论

比较表

比较依据
基本的内存以先进先出的方式分配(LIFO)。内存以随机顺序分配。
分配和解除分配自动手册
成本更多
实作简单
调用中上)O(1)
问题内存不足内存碎片
参考地点优秀的充足
灵活性固定大小,不灵活可以调整大小
访问时间快点慢点

堆栈的定义

堆栈分配遵循LIFO(后进先出)策略,用于通过推入和弹出操作将内存分配给进程。内存中的每个块都是固定大小,无法扩展或缩小。堆栈中的最后一个条目随时可以访问。堆栈使用连续的内存,其中一个名为堆栈基的指针指向堆栈的第一个条目,另一个名为堆栈顶部的指针指向堆栈的最后一个条目。

堆栈还支持函数调用。函数调用可以保存堆栈条目的集合,称为堆栈框架。堆栈帧的另一个名称是编译器con中的激活记录,因为它存储了程序编译时使用的数据。每当调用函数时,堆栈框架就会被推入堆栈。


堆栈框架由函数参数的地址或值以及返回地址组成,表示完成函数执行后应在何处返回控件。

堆的定义

堆分配不遵循任何确定的方法;相反,它允许内存的随机分配和取消分配。进程的分配请求返回一个指针,该指针指向堆中分配的内存区域,并且进程通过指针访问分配的内存区域。

释放是通过释放请求进行的,这与自动分配内存的堆栈不同。构建和释放数据结构时,堆会在内存分配中产生漏洞。在运行时使用。

  1. 在堆栈中,分配和释放是由CPU完成的,并且是自动的,而在堆中,则需要程序员手动进行分配和释放。
  2. 堆帧处理比堆帧处理要昂贵。
  3. 堆栈的实现很复杂。相反,堆的实现很简单。
  4. 堆栈中的函数调用需要O(N)时间。相反,它在堆中需要O(1)时间。
  5. 堆栈实现主要遭受内存不足的问题。相反,堆中的主要问题是碎片。
  6. 与堆栈相比,访问堆栈帧比堆更容易,因为堆栈被限制在内存的较小区域中,并且总是命中高速缓存,但是堆帧分散在整个内存中,因此内存访问会导致更多的高速缓存未命中。
  7. 堆栈不灵活,分配的内存大小无法更改。另一方面,堆很灵活,分配的内存可以更改。
  8. 堆比栈花费更多的访问时间。

结论

堆栈分配更快但很复杂。另一方面,堆较慢,但其实现比堆栈更简单。堆比堆栈更有效。