2

そこで、C プログラムで共有メモリ セグメントを作成しようとしています。たとえば、単純な文字を書き込んで、別の C プログラムからその文字を読み取ることができます。

calloc()andを使おうとしてきましたがmalloc()、これはこのプログラム自身のheap.

これと同じことを行う別の機能がありますが、RAMメモリ内にありますか? 多分16進数の値を介して?それとも、私は間違っていて、これらの関数は実際にすべてのプロセスに見えるメモリを予約していますか?

前もって感謝します。

編集: -私は Windows 8 を使用しています。 -言語は C に限定されず、他の言語でもかまいません。

4

2 に答える 2

2

分離されたプロセス間でデータを転送する必要がある場合、選択できるプロセス間通信がいくつかあります。メモリのチャンクの共有は、通常、ファイル マッピングオブジェクトを使用して実装されます。

ファイル マッピング オブジェクトを設定するには、次の一連の API 呼び出しが必要です。

  1. CreateFileMapping : ファイル マッピング オブジェクトを作成します。一意の名前 (GUID の文字列表現など) を渡すと、他のプロセスからこのオブジェクトに簡単にアクセスできます。
  2. MapViewOfFile : ファイル マッピングのビューを呼び出しプロセスのアドレス空間にマップします。その時点で、メモリ ビューに書き込むだけで、ファイル マッピング オブジェクトを使用できます。

別のプロセスから既存のファイル マッピング オブジェクトを使用するには、次の呼び出しが必要です。

  1. OpenFileMapping : 既存のファイル マッピング オブジェクトへのハンドルを開きます。
  2. MapViewOfFile : ファイル マッピングのビューを呼び出しプロセスのアドレス空間にマップします。メモリ ビューでのメモリへの変更は、すべてのビューでそのファイル マッピングに反映されます。

プロセス間でファイル マッピングを介してメモリを共有するには、それらのプロセス間の同期が必要であることに注意してください。このトピックは、この回答の範囲を超えています。MSDN では、同期について紹介しています。


サンプル コードも MSDN で入手できます:名前付き共有メモリの作成

于 2016-08-08T11:48:05.130 に答える
0

これを行う標準的な方法はありません。Unix/Linux で作業している場合は、共有メモリの malloc実装を確認することをお勧めします。これは、Windows マシンの Cygwin でも動作しますが、実際には Unix 用に設計されています。

于 2013-06-14T17:43:07.543 に答える