30

したがって、動的に割り当てられたメモリが必要な場合は、malloc()を使用できることを理解しています。たとえば、プログラムは可変長ファイルをchar[]に読み込みます。配列の大きさが事前にわからないため、実行時にメモリを割り当てます。

いつmmap()を使用するかを理解しようとしています。マニュアルページを読みましたが、正直なところ、ユースケースが何であるかわかりません。

誰かが私にユースケースを簡単な言葉で説明できますか?前もって感謝します。

4

2 に答える 2

41

mmapいくつかのことに使用できます。まず、ファイルに基づくマッピング。ファイルにメモリを割り当てmallocてファイルを読み取る代わりに、ファイルを明示的に読み取らずにファイル全体をメモリにマップします。これで、そのメモリ領域から読み取る(または書き込む)と、操作はファイルに対して透過的に機能します。なぜあなたはこれをしたいのですか?OSが提供するページングメカニズムを使用して、使用可能なメモリよりも大きいファイルを簡単に処理できます。小さいファイルの場合でも、mmapを実行するとメモリコピーの数が減ります。

mmap匿名マッピングにも使用できます。このマッピングはファイルに裏打ちされておらず、基本的にはメモリのチャンクに対する要求です。それがに似ているように聞こえるならmalloc、あなたは正しいです。実際、のほとんどの実装は、malloc内部で匿名mmapを使用して大きなメモリ領域を提供します。

もう1つの一般的な使用例は、複数のプロセスが同じファイルを共有マッピングとしてマップして、共有メモリ領域を取得することです。ファイルを実際にディスクに書き込む必要はありません。 shm_openこれを実現するための便利な方法です。

于 2012-08-23T15:45:29.727 に答える
7

固定サイズのデータ​​のブロックを読み書きする必要があるときはいつでも、メモリを割り当て、ファイルを読み取り、データにアクセスするのではなく、mmapを使用してディスク上のデータファイルをメモリにマップし、直接アクセスする方がはるかに簡単(かつ高速)です。データをディスクに書き戻し、メモリを解放する可能性があります。

于 2012-08-23T15:44:39.670 に答える