どのように私はOSX上のバッキングファイルを使用せずにメモリマップドファイルを作成するのですか?

StackOverflow https://stackoverflow.com/questions/3616189

質問

私は、そのデータにアクセスするための基本的な手段として、ファイル記述子を使用するライブラリを使用します。パフォーマンス上の理由から、私はこのライブラリの関数を使用する前に、ディスクごとにファイルをコミットする必要がありますする必要はありません。

私は、その場で(大)データブロブを作成し、サーバーに送信するライブラリに呼びたいです。現状では、私は、ファイルをディスクに書き込み、それを開いて、ライブラリにFDを渡し、最後までそれを待つ、その後、ディスク上のファイルを削除する必要があります。私はオンデマンドで再作成の塊缶(と彼らは過度の仮想メモリのページングを引き起こすほど大きくないです)、ディスク買い、私は何もに保存すると、大きなパフォーマンスの低下を招き以来ます。

は、データのブロックその存在のみメモリマップエンティティとして

にFDを割り当てることが可能です
役に立ちましたか?

解決

あなたがマウントできのメモリ・バックアップファイルシステムの<のhref = "http://lists.apple.com/archives/darwin-kernel/2004/Sep/msg00004.html" のrel = "nofollowをnoreferrer"> http://lists.apple.com/archives/darwin-kernel/2004/Sep/msg00004.html の

システム上のメモリ圧力が増加します。このメカニズムを使用すると、メモリの圧力が素晴らしい十分であれば、おそらくページアウトされます。ユーザーではなく、いくつかの他のアプリケーションがメモリの最初の選択肢があります場合は、設定オプションにする価値があるかもしれません。

別のオプションを使用することですの POSIXは、のメモリセグメントを共有: http://opengroup.org/onlinepubs/007908799/xsh/shm_open.html の(私はPOSIXは、メモリ・セグメント自分自身を共有し使用していない;。私はそれらを正しく理解していれば、それらはまさにこの問題を解決するために設計されました)

shm_open()機能は、メモリオブジェクトを作成し、ファイル記述子を返します。あなたは、その後、そのファイルディスクリプタをmmap(2)作業を行うには、ライブラリにファイル記述子を渡すことができます。

あなたが行われているオブジェクトをshm_unlinkすることを忘れないでください。 POSIXは自動的に消えていないメモリ・セグメント、メッセージキュー、セマフォ配列を共有するとき、最後のプロセスが終了ます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top