私は (C で) 私の学習プロジェクトに取り組んでおり、追加の学習ポイントのために C++ に移行することを考えました。その一部には、特定のオブジェクト ファミリのガベージ コレクション システムが含まれます。C では、通常、大きな malloc/mmap を使用して実装し、単純な単純なマーク アンド スイープを使用します (参照などを識別できます)。すでに)。
私の問題は、そのアイデアを C++ に移植することを検討していたが、そのメモリ管理スキームを十分に理解しているとは思えないことです。
これまでのところ、大きなメモリ プールを割り当て、基本クラスで演算子 new と delete をオーバーロードして、メモリ プールのグラブ/リリース関数を呼び出し、ガベージ コレクターのスイープ フェーズでオブジェクトを認識したとおりに削除することを検討しました。それで十分?ここで見落としている隠れた落とし穴は何ですか?
編集:明確にするために、割り当てられたオブジェクトの寿命をすでに把握できるため、gc abiを使用する必要はありません。オブジェクトが C++ コードによって操作されることはめったになく、それらを使用するコードは、スタックを検査する必要なく、オブジェクトが使用されていることを gc に通知できます。