2

malloc と mmap システム コールの違いを調べています。これら2つの正確な違いは何ですか? どれがおすすめ?

4

3 に答える 3

6

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() はヒープ上のメモリを指します。

于 2013-03-13T16:28:47.123 に答える
2

mmap()実際にはファイルをメモリにロードしません(メモリを使用しませんが、アドレス空間を占有します)が、malloc()ヒープからメモリを割り当てます。

私の推奨はmalloc()、小さなオブジェクトとmmap()大きなオブジェクトに使用することです。

于 2013-03-04T14:11:33.597 に答える
1

それらは非常に異なります。

  1. malloc()ヒープからメモリを割り当てます。
  2. mmap()メモリ マップト ファイルの APIです。

ほとんどの場合、それらは互いの代替ではありません。そのため、どちらが優れているかという質問にはあまり意味がありません。

于 2013-03-04T14:15:21.170 に答える