-1

この問題を説明する簡単な例を次に示します (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()、これを行うことができます。どうすればこれを行うことができますか?

これは、私が扱っている問題の種類を示すための非常に単純な例です

4

1 に答える 1