私はmmapで永続的な大きな定数配列を実装しています。 mmapを使用する際に注意すべきヒントや秘訣がありますか?大きなファイルをmmapingする(永続的な大規模配列の場合)
1
A
答えて
4
mmap'd領域内に格納されるすべてのポインタは、実際のポインタではなく、mmap'd領域のベースからのオフセットとして実行する必要があります。次回のプログラム実行時に領域をmmapするとき、必ずしも同じベースアドレスを取得する必要はありません。 (私は、mmap領域のベースアドレスの不変性について誤った仮定をしたコードを整理しなければならなかった)。
3
開いているファイルサイズやメモリの使用に関する制限を確認してください。 Linuxでは、シェルコマンドulimitが組み込まれています。 ulimit -a
として実行すると、現在の設定が表示されます。
メモリ内の配列をmsync(2)のシステムコールでフラッシュするか、munmap(2)がメモリに残り、その前に停電などが発生する可能性があります。
読み取りと書き込みの権限で共有される同じメモリ領域が複数のプロセスでmmapされている場合は、データの破損を避けるため、一度に1つのプロセスしか書き込みを行わないようにしてください。または、ファイルのロックやその他の同期手段を使用します。
3
これはmmap()のもっとも単純な使用例ですので、あまり動かすべきではありません。
大きな定数配列をロードするだけです。定数なので、同期について心配する必要はありません。 protパラメータがPROT_READに設定されていることを確認することをお勧めします。
定数を使用する1つまたは複数のプログラムが継続的に実行される場合、データをロードして常駐させる別のプログラムを用意する価値があります。他のプログラムの実行は、本質的にファイルをメモリに連続的に読み込むのではなく、共有メモリの接続を行うだけです。
関連する問題
- 1. 大規模なperlの配列のスローダウン
- 2. 大規模なユニバースを手続き的に生成する
- 3. 大規模なPHP配列ページ設定
- 4. は、大規模な配列を作りたい大numpyのアレイ
- 5. セグメンテーションフォールト、大規模配列
- 6. JAVA:ファイルが存在する大規模なXMLデータベースを検索する場合
- 7. 大規模なJSONファイルを効率的にループする
- 8. 大規模な.sqlファイルをMySQLにインポート
- 9. 大規模なmain.jsファイルのAngular 2アプリビルド
- 10. 大規模なXMLファイルの15.1
- 11. 大規模な配列をSQLiteにキャッシュする - Java/Android
- 12. 大規模なXMLファイルの効率的な格納とアクセス
- 13. Pythonの大規模配列の比較
- 14. Javaの大規模配列プログラミング
- 15. 大規模な文字列の比較
- 16. 大規模なLaravelアプリケーション複数のモデルの場合のパフォーマンス
- 17. 大規模な配列データファイルgnuplotの最大エントリを見つけるには?
- 18. 大規模なコレクションの場合、i4oとPLINQの比較
- 19. 大規模なcsvファイルをリストまたはnumpy配列のPythonでロードする
- 20. *クイックルックアップのための永続ストレージを備えた大規模な* Python辞書
- 21. ブラウザで3000万を超える大規模なCSVファイルを扱う場合
- 22. のJava:大規模なリスト
- 23. 大規模なグリッドデータセットのストレージ
- 24. 大規模なコミュニティのCMS
- 25. Pythonの大規模なピボットテーブル
- 26. 大規模な配列でオートコンプリート候補を効率的に検索する
- 27. Scalaで大規模な配列やリストを作る方法
- 28. 大規模なExcelファイルを小さなファイルに分割する
- 29. 大規模なネットワーク反復 - 並列性?
- 30. Android:大規模な配列を扱うためのベストプラクティス
データが一定であるため、フラッシュする必要はありません。 –