この場合、「最善」はありません。あなたにとって何が最善かは、あなたの状況に大きく依存します。しかし、あなたの詳細と、このうさぎの穴がどれだけ深くなるかについて考えさせるための例を挙げましょう.
疑問の余地なく最速の保存が絶対に必要な場合 (そして代償を払う意思がある場合) は、独自のメモリ管理を定義して、すべてのオブジェクトを共通の型 (整数など) の連続した配列に入れることができます。これにより、その配列をバイナリ データとしてディスクに非常に高速に書き込むことができます。これは、スレッドを効率的に使用してすべてのコア/プロセッサをロードしてリアルタイムで実行するシミュレーションで必要になる場合があります。
なぜかなり恐ろしい解決策なのですか?「最適化」という名の下に、多くの作業が必要であり、多くの問題のリスクを冒しているからです。
- 独自のメモリ管理 (演算子 new() および演算子 delete()) を構築する必要があり、スレッド セーフである必要がある場合があります。
- この配列からロードしようとする場合は、すべての仮想ポインターが適切に設定されるように、一意の非変更コンストラクターを使用して新しいすべてのオブジェクトを配置する必要があります。ああ、これを行うには、各アドレスのタイプを追跡する必要があります。
- 他のシステムとの移植性およびバイナリのバージョン間での移植性のために、バイナリ形式からクロス プラットフォームに対応できる一般的な形式に変換するユーティリティが必要です (他のオブジェクトへのポインタの再設定を含む)。
私はこれをしました。非常に不愉快でした。まだ問題があることは間違いありません。ここにリストしたのはほんの一部です。しかし、それは非常に速く、非常に問題がありました。
ニーズに合わせて設計する必要があります。一般的に、最初のニーズは「機能させる」ことです。効率は気にしないでください。正確に持続するものと、それを実行するための情報を知っていて、ある時点でアクセスできることだけが重要です。また、保存と読み込みのプロセスをカプセル化する必要があります。次に、「より良くする」必要が生じた場合は、そのコードを 1 ビット変更するだけで、残りは機能するはずです。すべてのユーザーに対して想定しなければならないニーズではなく、ユーザーのニーズに応じて保存形式を選択できるようにすることもできます。
リストされているすべての仮定、長所と短所を考えると、この質問に対する特定のニーズを詳しく説明できるはずです.