这是一个解释问题的简单示例(使用 c++):
A* a1 = new A;
A* a2 = new A;
A* a3 = new A;
delete(a2);
B* b = new B;
.
.
.
假设一个A
对象的大小是3,一个B
对象的大小是4,我的堆的大小是12,删除a2后,内存是这样的:
XXX---XXX---
B* b
即使有足够的内存,我也无法创建对象,因为它不是连续的。
只是一个简单的内存碎片示例。
我可以通过创建某种reallocate()
函数来动态避免这种情况,该函数将“移动”对象的内存a3
并将其放在 a 之后:
XXXXXX-----
该函数显然应该在删除后调用a2
,所以也许重新实现deallocate()
或者delete()
可以做到这一点,请问我该怎么做?
这只是一个非常简单的例子来展示我正在处理的问题