7

Windows で共有メモリ セグメントを作成する場合 (などCreateFileMapping(INVALID_HANDLE_VALUE, ...))、より大きなセグメントを作成してデータをコピーする以外に、サイズを変更する方法はありますか?

ファイル マッピングのサイズは固定されていることを MSDN で読みましたが、同じメモリ上で新しいマッピングを作成する方法はありますか? Linux のように、何度も何度も使用shm_open()できftruncate()ますmmap()

4

1 に答える 1

6

簡単に言うと、いいえです。一度作成したファイル マッピングのサイズを変更することはできません。あなたが説明する作成/コピー シーケンスは、システム ページング ファイルに基づくファイル マッピングでこれを達成するために私が知っている唯一の方法です。

つまり、マッピングをサポートするファイルを自分で管理して、これを達成できます。ゼロで初期化された独自のデータ ファイルから開始し、有効なハンドルを への呼び出しに指定しますCreateFileMapping()

サイズを変更する必要がある場合は、マッピングを閉じ、ファイルを拡張して、マッピングを再作成します。これには、拡張/切り捨て操作間の同期が必要になります-簡単ではありませんが、それほど難しくないはずです。

結局のところ、それは同じ古い話です。複雑さとパフォーマンスが追加されました。

于 2011-06-06T16:43:37.997 に答える