内存碎片会导致内存不足异常吗?

时间:2018-03-23 15:30:26

标签: c++ memory-management out-of-memory

内存碎片导致内存异常"内存异常"或者程序和系统可以在运行时处理这个问题吗?

1 个答案:

答案 0 :(得分:1)

是的,从理论上讲,碎片可能导致内存不足异常。假设您进行了大量小对象的分配,这些对象主要填充您的内存,然后您删除所有其他对象。这将产生大量的可用内存,但它们都是非常小的块 - 这是极端的碎片。如果您尝试分配大于任何这些块的对象,则分配将失败。

运行时系统通常无法解决此问题,因为在大多数实现中,指针中的地址无法自动更改。因此,不能重新安排分配以合并所有可用空间。

良好的堆管理实现旨在使这种可能性不大。一种常见技术是针对不同的分配大小使用不同的存储区域。小的分配来自一个区域,来自另一个区域的中等分配,以及来自其自己区域的大量分配。因此,如果在小区域中出现大量碎片,则不会导致大量分配问题。