C プログラミングでは、一連の関数を介して C 標準ライブラリ内のメモリの割り当てを指す動的メモリがあります。 Malloc はその XNUMX つで、メモリの割り当てに使用されます。
次にmmapです。 これは、独自の入力と出力を持つメモリ マップド システムとして使用されます。 これら XNUMX つは同じ機能を提供しますが、このトピックをさらに掘り下げると、いくつかの違いが明らかになります。
主要な取り組み
- mmap はファイルまたはデバイスをアドレス空間にマッピングすることによってメモリを割り当てますが、malloc はヒープからメモリを割り当てます。
- mmap はプロセス間通信のための共有メモリ機能を提供しますが、malloc は提供しません。
- mmap によって割り当てられたメモリは自動的にゼロに初期化されますが、malloc は初期化されていないメモリを返す場合があります。
Mmap vs マロック
Mmap は、ファイルまたはデバイスをメモリにマップするシステム コールです。 データの保存など、さまざまな目的に使用できる割り当てられたメモリへのポインターを返します。 マロク 指定されたサイズのメモリ ブロックを配給し、ブロックの最初のバイトへのポインタを返すライブラリ関数です。
コンピューティングにおける Mmap は、メモリ内のすべてのデータ、ファイル、およびデバイスを記録する POSIX マルチタスク システム コールです。 これは、メモリ マップト ファイルに該当し、ドライブからコンテンツを直接読み取ることができないため、物理メモリへのデータのコピーを実装する方法としても知られています。
Malloc は、指定されたサイズに関して巨大なデータ ブロックを動的に割り当てるために使用されるメモリ割り当てという用語の短縮形であり、成功すると割り当てられたメモリの最初のバイトを指すポインタを返し、それ以外の場合は NULL を返します。 .
実際のメモリ割り当てメカニズムでは、Malloc によって使用されるさまざまな成果が利用可能です。
比較表
比較のパラメータ | Mマップ | マロク |
---|---|---|
定義 | Mmap は、ページのマッピング用に大きなアドレスを見つけるようにカーネルに要求するシステム コールを指します。 | Malloc は、システムで使用可能なすべての機能を収集するメイン メモリ割り当てインターフェイスです。 |
演算 | Mmap はコンテキスト スイッチを使用して、カーネルランドにします。 | Malloc は、apile でメモリのブロックを割り当てます。 |
とも呼ばれる | Mmap はシステムコールとも呼ばれます. | Malloc は、メイン メモリ割り当てインターフェイスとしても知られています。 |
結果 | Mmap が他のシステム パフォーマンスに影響を与えることはありません。 | Malloc はシステムを混乱させ、パフォーマンスを低下させます。. |
に最適 | Mmap は、アプリケーションからの応答プロセスを高速化するのに最適です. | Malloc は、システム内の任意のアプリケーションにメモリを割り当てるのに最適です。. |
Mマップとは?
Mmap は、データ、ファイル、またはデバイスをメモリにマップする POSIX 準拠の Unix システム コールと呼ばれます。 メモリマッピングの入出力方式です。
呼び出しプロセスの仮想アドレス空間に新しいマッピングが作成されます。 addr では、新しいマッピングの初期アドレスが検出され、マッピングの長さは length 引数 (0 より大きい必要があります) によって指定されます。
addr が NULL であることが判明した場合、カーネルによってアドレスが選択され、マッピングが作成されます。これは、新しいマッピングを作成する最も簡単な方法と考えられています。
アドレスが NULL として検出されない場合、カーネルは、Linux 上の場所にマッピングを配置するための指示であると見なします。
カーネルは最も近いページ境界を見つけ、その領域でマッピングを作成しようとします。 カーネルは、その領域にマッピングが既に存在することを検出した場合、カーネルが想定した指示に応じて新しいアドレスを選択します。
この呼び出しの結果、新しいマッピングのアドレスが返されます。 呼び出しが返された直後に、ファイル記述子 fd は無効化せずにただちにマッピングを閉じます。
マロックとは?
malloc() は size バイトを割り当て、割り当てられたメモリへのポインタを返すメモリ割り当て関数です。 メモリが初期位置に設定されていません。
サイズ バイト名が 0 の場合、NULL または一意の値ポインターが malloc () によって送信され、後で free () に正常に渡すことができます。
ptr が指すメモリ空間は free() 関数によって解放され、malloc() によって返されるはずでした。 それ以外の場合、free (ptr) が以前に呼び出された場合、未定義の動作が発生すると言われています。
ptr が NULL である場合、操作は実行されません。 ptr が NULL であることが判明した場合、呼び出しの値は size のすべての値の malloc (サイズ) と等しくなります。 それが 0 に等しく、ptr が NULL でない場合、呼び出し値は free (ptr) と等しくなります。
ptr が NULL の場合のみ、malloc() への以前の呼び出しによって送り返されているはずです。 そして、ポイントされた領域が変更され、フリー (ptr) が行われます。
デフォルトでは、 楽観的 メモリ割り当て戦略は Linux で採用されています。つまり、malloc () が非 NULL を返すと、メモリが失われる可能性があります。
また、システムのメモリが不足していることが判明した場合、OOM キラーによってほとんどのプロセスが破壊されません。
Mmap と Malloc の主な違い
- Mmap はシステム コールとして知られていますが、Malloc はメイン メモリ割り当てインターフェイスです。
- Mmap はページのマッピングに役立ち、Malloc はシステム内のデバイスとデータを割り当てます。
- Mmap はコンテキストを変換します スイッチ 一方、Malloc はデバイスにメモリを割り当てます。
- Mmap は応答プロセスを高速化するために推奨されますが、Malloc はシステム内のメモリを割り当てるために推奨されます。
- 実行後の Mmap は、他のシステム アプリケーションのパフォーマンスに影響を与えませんが、Malloc は、システムを混乱させることができる人々からパフォーマンスを妨害します。
- https://www.usenix.org/publications/library/proceedings/als01/full_papers/ezolt/ezolt_html/
- https://www.usenix.org/publications/library/proceedings/als01/full_papers/ezolt/ezolt.ps
最終更新日 : 11 年 2023 月 XNUMX 日
Sandeep Bhandari は、Thapar University (2006) でコンピューター工学の学士号を取得しています。 彼はテクノロジー分野で 20 年の経験があります。 彼は、データベース システム、コンピュータ ネットワーク、プログラミングなど、さまざまな技術分野に強い関心を持っています。 彼の詳細については、彼のウェブサイトで読むことができます バイオページ.
この記事では、Mmap と Malloc の優れた比較が提供され、それぞれの独自の機能と使用例が強調されています。これはプログラマーにとって貴重なリソースです。
これは非常に有益な記事です。 Mmap と Malloc の比較が特に興味深いと思いました。これにより、それらがどのように機能するのか、何が異なるのかが明確に理解できます。
この記事は Mmap と Malloc の違いを効果的に捉えており、十分に調査された有益な分析を提供しています。すごい仕事。
この記事の Mmap と Malloc の比較は非常に洞察力に富んでいると思いました。それらの違いと使用例の包括的な概要を提供します。
2つの機能を比較しながら、非常に詳しく丁寧に解説しています。 C プログラミングのメモリ割り当てに関する情報を探している人にとっては素晴らしいリソースです。
詳細な比較は、Mmap と Malloc のアプリケーションを理解するのに役立ちます。機能と使用例についての明確な説明に感謝します。