什么是堆分配?
堆分配是最灵活的分配方案。内存的分配和释放可以根据用户的要求随时随地进行。堆分配用于动态地为变量分配内存,当变量不再使用时,将其收回。
堆管理专门研究数据结构理论。通常有一些与堆管理器相关的时间和空间开销。出于效率原因,将特定大小的小活动记录作为特殊情况处理可能很有用,如下所示-
对于每个感兴趣的大小,保留该大小的空闲块的链表。
如果可能,用大小为S'的块填充大小为s的请求,其中S'是大于或等于s的最小大小。当块被释放时,返回到链表。
对于更大的存储块,请使用堆管理器。
有两种用于堆管理的方法如下-
垃圾回收方式
当一个对象的所有访问路径被销毁,但数据对象继续存在时,这种类型的对象被称为垃圾。垃圾收集是一种用于重用该对象空间的技术。
在垃圾回收中,首先我们标记所有活动对象,并将所有剩余的垃圾回收为“on”的元素进行垃圾回收并返回到空闲空间列表。
参考计数器
通过引用计数器,尝试在无法再访问后立即回收堆存储的每个元素。
堆上的每个内存单元都有一个与之关联的引用计数器,其中包含指向它的值数量的计数。每次有新值指向单元格时,计数都会增加,而每次停止指向单元格时,计数都会减少。当计数器变为零时,单元将返回到空闲列表以进行进一步分配。
堆分配的属性
堆分配有多种属性,如下所示-
空间效率-内存管理器应最小化程序所需的总堆空间。
程序效率-内存管理器应该充分利用内存子系统来让程序运行得更快。由于执行一条指令所花费的时间可能因对象在内存中的位置而异。
低开销-内存分配和释放是许多程序中的频繁操作。这些操作必须尽可能高效。即,需要最小化开销。执行分配和释放所花费的执行时间的比例。