malloc と mmap システム コールの違いを調べています。これら2つの正確な違いは何ですか? どれがおすすめ?
3 に答える
mmap() は、ディスク上のファイルからデータをマップするためのシステム レベルのアドレスです。mmap() を使用すると、単純な byte[] 配列であるかのように、ディスク上の任意のファイルを参照できます。次のいずれかのアプリケーションで使用できます。
ディスク上のファイルからデータを要求すると、RAM にロードされます。同じファイルからのデータを必要とする 2 つの別個のプログラムがある場合は、mmap() を使用してディスクからそのファイルに直接アクセスできます。これにより、冗長な RAM の使用量を削減できます。
メインメモリ (RAM) に収まらないほど大きなデータを扱っている場合、mmap() を使用して、ディスクに物理的に保存されているファイルのデータの一部にアクセスし、RAM を削減することができます。 RAM データよりも大きなデータを効果的に使用および処理します。
64 ビット システムでは mmap() はディスク上の任意の場所をアドレス指定できますが、32 ビット システムではアドレス指定できないことに注意してください。32 ビット システムではアドレス可能な最大スペースが 2^32 - 1 (4GB) に制限されているため、64 ビット システムでは数ペタバイトの場所をアドレス指定できます。
malloc() は、ヒープ (RAM 内) から一時オブジェクトを格納するためのスペースへのポインターを提供します。
mmap() と malloc() の唯一の類似点は、どちらもポインターを返すことです。ただし、 mmap() はディスク上のメモリを指し、 malloc() はヒープ上のメモリを指します。
mmap()
実際にはファイルをメモリにロードしません(メモリを使用しませんが、アドレス空間を占有します)が、malloc()
ヒープからメモリを割り当てます。
私の推奨はmalloc()
、小さなオブジェクトとmmap()
大きなオブジェクトに使用することです。
それらは非常に異なります。
malloc()
ヒープからメモリを割り当てます。mmap()
メモリ マップト ファイルの APIです。
ほとんどの場合、それらは互いの代替ではありません。そのため、どちらが優れているかという質問にはあまり意味がありません。