動的に割り当てられたメモリが必要な場合は、malloc()を使用することができます。たとえば、プログラムは可変長ファイルをchar []に読み込みます。事前に配列の大きさを知っていないので、実行時にメモリを割り当てます。いつmmapを使用するのですか
mmap()をいつ使用するのかを理解しようとしています。私はマニュアルページを読んできました。正直言って、ユースケースが何であるか分かりません。
誰かが簡単な言葉で私にユースケースを説明できますか?前もって感謝します。
動的に割り当てられたメモリが必要な場合は、malloc()を使用することができます。たとえば、プログラムは可変長ファイルをchar []に読み込みます。事前に配列の大きさを知っていないので、実行時にメモリを割り当てます。いつmmapを使用するのですか
mmap()をいつ使用するのかを理解しようとしています。私はマニュアルページを読んできました。正直言って、ユースケースが何であるか分かりません。
誰かが簡単な言葉で私にユースケースを説明できますか?前もって感謝します。
mmap
をいくつか使用できます。まずファイルベースのマッピング。 malloc
でメモリを割り当ててファイルを読み込む代わりに、ファイル全体を明示的に読み込まずにメモリにマップします。そのメモリ領域から読み込んだり(または書き込む)と、操作はファイルに対して透過的に行われます。なぜあなたはこれをしたいのですか?これは、OS提供のページング・メカニズムを使用して、使用可能なメモリーよりも大きなファイルを簡単に処理できるようにします。小さなファイルの場合でも、mmappingはメモリコピーの数を減らします。
mmap
は、匿名マッピングにも使用できます。このマッピングはファイルによってサポートされておらず、基本的にメモリのチャンクの要求です。それがmalloc
に似ている場合、あなたは正しいです。実際には、malloc
のほとんどの実装では、匿名のmmap
を内部的に使用して大きなメモリ領域を提供しています。
別の一般的な使用例は、共有メモリ領域を取得するために、複数のプロセスが同じファイルを共有マッピングとしてマップすることです。ファイルは実際にディスクに書き込まれる必要はありません。これを実現させる便利な方法はshm_open
です。
固定サイズのデータブロックを読み書きする必要がある場合は、mmapを使用してディスク上のデータファイルをメモリにマップし、メモリを割り当てずに直接アクセスし、ファイルを読み込み、データにアクセスし、潜在的にデータをディスクに書き戻し、メモリを解放する。
少量のメモリで大きなファイルにアクセスする方法の詳細については、リンクがありますか?この点は、mmap()が動作する方法を私に混乱させます。 – Ioan
@Ioan大きなファイルについては実際には細部はありません。このファイルは当然_virtual_メモリに収まる必要がありますが、仮想メモリ全体はいつでもRAMに存在する必要はありません。 'mmap'はスワップ空間と同じ仕組みを使います。しかし、virutal memoryの仕組みについての説明は、コメントには長すぎるでしょう:) –
あなたのコメントはもっと理にかなっています。私はあなたが使用可能なメモリよりも大きなファイルを処理することを意味していると誤解しました。 – Ioan