この問題を説明する簡単な例を次に示します (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
XXXXXX------
関数は明らかに削除後に呼び出す必要があるa2
ため、再実装するdeallocate()
かdelete()
、これを行うことができます。どうすればこれを行うことができますか?
これは、私が扱っている問題の種類を示すための非常に単純な例です