私は数回前に C++ で一般的なメモリ内 B+Tree の実装を書きましたが、それをディスク上で永続化することを考えています (これが、最初に B+Tree が設計された理由です)。私の最初の考えは、mmap(私はLinuxを使用しています)を使用して、ファイルを通常のメモリとして操作し、新しいものを書き換えることでしたこれにより、マップされた部分にポインターが返され、RAMアドレスをファイルオフセットに変換してノードを他のノードにリンクできるスマートポインターが作成されます。しかし、ユーザーが int、std::string、または任意のカスタム クラスを B+tree に格納できるように、実装を汎用にしたいと考えています。ここで問題が発生します。プリミティブ型またはポインターを含まない集約型の場合はすべて問題ありませんが、オブジェクトにヒープ割り当てオブジェクトへのポインター/参照が含まれるとすぐに、このアプローチは機能しなくなります。
だから私の質問は: この困難を克服するための既知の方法はありますか? トピックに関する個人的な検索は失敗に終わりますが、何かを見逃している可能性があります。