GNU/Linux >> Linux の 問題 >  >> Linux

shm_open を使用する理由

両方の呼び出しは、最新の Linux では本質的に同等です。最初のアプローチは、POSIX 共有メモリが存在しない go (https://github.com/fabiokung/shm/blob/master/shm_linux.go を参照) などの言語から POSIX 共有メモリにアクセスするために使用できます。ネイティブに利用可能 - 最初の呼び出しでファイルが作成されるか、/dev/shm が利用できない、および/またはパフォーマンスが低下する可能性がある他の OS/バージョンでは異なる場合があります。パスのマージのルールも librt のバージョンごとに進化している可能性があります

メモリ マップド ファイル API と呼ばれる最初のアプローチ (std ライブラリでサポート)

2 つ目は、POSIX 共有メモリ API と呼ばれます (依存関係として、Linux では librt 別名 libposix が必要です。内部でパスを構築し、open を呼び出します)


shm_open のソースを読んだ後 、これら 2 つの方法はほとんど同じであると言えます。

リンク:https://code.woboq.org/userspace/glibc/sysdeps/posix/shm_open.c.html

shm_open は shm_dir プレフィックスを追加するだけで、通常の open を呼び出します システムコール、特別なことは何もありません。


通常のファイルを開いて mmap() すると、データはそのファイルに格納されます。

追加の I/O オーバーヘッドが発生するデータを永続化する必要がなく、メモリ領域を共有する必要がある場合は、shm_open() を使用します。

このようなメモリ領域には、ミューテックスやセマフォなど、ほとんどのシステムで mmap() された通常のファイルに格納できない他の種類のオブジェクトを格納することもできます。


Linux
  1. Linux / unixでファイルを実行するために「./」(ドットスラッシュ)を使用するのはなぜですか?

  2. CpやMkdirではなくInstallを使用する理由

  3. _roffを使用して単語に下線を付けますか?

  1. OpenStackでWindows10VMが遅いのはなぜですか?

  2. Linux –なぜSuだけでなくSuを使用するのですか?

  3. Linux プロセスのメモリをファイルにダンプする

  1. BashスクリプトでCdを使用できないのはなぜですか?

  2. Vimでファイルタイプを使用する方法は?

  3. ファイル名に / を使用できますか?