私のプログラムは、大きなデータファイルを処理し、メモリ内にルックアップテーブルを作成して、ファイルを検索せずにファイル内のレコードにアクセスする必要があります。たとえば、構造[name、seekLocation]の配列を作成し、アルファベット順にソートすることで、より高速な検索アルゴリズムを実装することができます。ファイルをメモリに保存し、データを解析することなくロードしますか?
このルックアップテーブルをプログラムを実行するたびに作成する代わりに、このテーブルを一度作成してファイルに保存することはできますか?
もちろん、1つの方法はそれだけです。それをファイルに保存して読み込み、解析してループ内の構造を埋めます。
しかし、私はそれを解析する必要があるデータとして保存したくありません。配列を含むメモリブロック全体を生のバイナリファイルに保存したい。次に、ファイルをメモリにロードし、そのブロックの先頭へのポインタを定義し、すべての要素をアドレス指定することができます。
どうすればいいですか?オペレーティングシステムや言語は、特にセキュリティ問題のためにそれを行うことを禁止していますか?もしそうでなければ、私はそれをするのに役立つライブラリやコードがありますか?
可能であれば、データ(リンクされたリスト)がばらばらになっている可能性がありますか?
正しい方向のポインタがあれば助かります。ありがとうございました。
私はLinuxでC++を使用しています。
データにポインタが含まれている場合は、それをダンプして再ロードするだけではありません。そして、* std strings *や* std vectors *のようなものにポインタを隠すことができることを覚えておいてください。たとえそれがポインタを含んでいなくても、あなたを動かすことができるものがあります。 – Galik
@Galikはい、おそらくポインタで作業することはできませんが、単なるデータブロックであれば、なぜ理論的にはできないのかわかりません。 –
"普通の古いデータ"(本質的にはプリミティブ型)なら、うまくいくはずですが、問題があります。バイナリデータファイルは、システム間で互換性があることは保証されていませんが、別のフラグを使用してコンパイルされた同じプログラムまたはそれ以降のバージョンのコンパイラと互換性がない場合もあります。これらのことは必然的に頻繁に変わるわけではありませんが、そうであれば保証はありません。 – Galik