Mmapとmallocの違い

Anonim

mmapとmallocに存在する一連の関数によるCプログラミング言語のメモリの割り当てを指します

Cにはダイナミックメモリがあり、これはC標準ライブラリにある一連の関数を通してCプログラミング言語でのメモリの割り当てを指します。これらのうちの1つはmallocで、メモリ割り当てを指します。 UNIXシステムには、mmapがあります。これは、独自のI / Oが付属しているメモリマップされたシステムを指します。これらの2つ(mmapとmalloc)は、同じ値段で同じ機能を果たしますが、さらに精査するといくつかの違いが明らかになります。機能性から生じるこれらの相違点を以下に概説する。

<!最初に、利用可能な記憶の著しい興奮があることを示す証拠があるかどうかを確かめることが重要である。これは、メモリ管理に対するプログラムの性能を測定することによって行われます。

メインメモリ割り当てインタフェースはmallocです。これはCライブラリで最大です。それに含まれる管理コードの一部はmmapです。 mallocが実行されると、利用可能なすべてのシステム機能が収集されます。カーネルを通じて追加のシステム機能を動かすことができます。これは、システムが十分なメモリ割り当てを確保するために使用するメモリ管理戦略の1つです。しかし、このプロセスは単純ではありません。メモリ割り当ての混乱を招き、パフォーマンスが低下する単純なプログラムを人々が作成するのを防ぐという唯一の理由から、複雑になっています。

<! - 2 - >

'mmap'は、システムコールであり、複数のページのマッピングを可能にするのに十分な大きさの未使用の連続した領域をアプリケーションのアドレスで見つけることをカーネルに要求しますメモリの。また、仮想メモリ管理構造の作成もあり、結果的にはセグメンテーションが発生しません。

Mallocは、一般に、ほとんどのメモリ管理プロセスで機能します。プログラムが追加メモリを必要とする場合、これはOSから借用されます。一方、Mmapはカーネルの土地に変換するコンテキストスイッチを利用しています。

<! - 3 - >

mmocは、mmapを使用するのではなく、システム上で動作するアプリケーションにメモリを割り当てるのに最適です。これは、許可される特別な場合を除いて、デフォルトで発生する必要があるものです。

Mmapは、アプリケーションからの応答を高速化するために使用できます。ただし、アプリケーションがスムーズに実行できるように、ページにいくつかのバイトを犠牲にしてしまうため、これはお勧めできません。データの内容は最初は小さく見えるかもしれませんが、多くのアプリケーションを実行したいときにデータの内容を外挿すると、事実上システムがさらに遅くなることがあります。性能およびリソース使用量を測定した後、システム上で実行されているすべてのアプリケーションによるデータ使用の徹底的な評価を行う必要があります。実行中のアプリケーションの存続期間を表示できる場合は、それが向上する可能性があります。

メモリを割り当てるためにmmapを使用すると、チャンク内のデータの割り当てと割り当て解除が高価になるという欠点があります。これは、データが多数の領域に分割され、システムコールの作成からmmapが拒否されるためです。

mmapで使用されたメモリはすぐにOSに戻されるため、Mmapはmallocよりも有利です。 mallocによって消費されたメモリは、データセグメントブレークがない限り返されません。このメモリは特別に再利用されています。

'malloc'は主メモリ割り当てポイントを表します

mmapシステムは、アプリケーションアドレス内の未使用領域を検索し、いくつかのメモリページのマッピングに対応できるカーネルに呼び出します。

Mmapは推奨されません使用可能なメモリーを分割してメモリーを割り振り、システム・コールを行うことはできません。mallocを超えるmmapのメリットは、mallocメモリーとは対照的に、メモリーの可用性です。