什么是堆分配?


堆分配是最灵活的分配方案。内存的分配和释放可以在任何时间和任何地点进行,具体取决于用户的需求。堆分配用于动态地为变量分配内存,当不再使用变量时,将其回收。

堆管理是数据结构理论中的一个专门领域。堆管理器通常会带来一些时间和空间开销。出于效率原因,将特定大小的小型激活记录作为特殊情况处理可能很有用,如下所示:

  • 对于每个感兴趣的大小,维护该大小的空闲块的链接列表。
  • 如果可能,用大小为 S' 的块来满足大小为 s 的请求,其中 S' 是大于或等于 s 的最小大小。当块被释放时,将其返回到链接列表。
  • 对于更大的存储块,使用堆管理器。

堆管理使用两种方法,如下所示:

垃圾回收方法

当所有访问某个对象的路径都被销毁,但数据对象仍然存在时,此类对象被称为垃圾。垃圾回收是一种用于重用该对象空间的技术。

在垃圾回收中,首先,我们标记所有活动对象,所有其余元素(其垃圾回收“开启”)都被视为垃圾并返回到空闲空间列表。

引用计数

通过引用计数,尝试在堆存储的每个元素无法再被访问后立即回收它。

堆上的每个内存单元都关联一个引用计数器,其中包含指向它的值的个数。每次有新的值指向该单元时,计数器加 1;每次某个值不再指向它时,计数器减 1。当计数器变为零时,该单元将返回到空闲列表以供进一步分配。

堆分配的特性

堆分配具有多种特性,如下所示:

  • 空间效率- 内存管理器应最大限度地减少程序所需的总堆空间。
  • 程序效率- 内存管理器应充分利用内存子系统,以加快程序运行速度。因为执行指令所需的时间会因对象在内存中的位置而异。
  • 低开销- 内存分配和释放在许多程序中都是频繁的操作。这些操作必须尽可能高效。也就是说,需要最大限度地减少开销。执行时间中用于执行分配和释放的比例。


更新于:2021-11-08

14K+ 浏览量

开启您的 职业生涯

通过完成课程获得认证

立即开始
广告