2

以下は、公式のBOOSTドキュメントからのものです。呼び出し時に常にサイズがゼロになるのはなぜregion.get_size()ですか?私は何が間違っているのですか?

int main(int argc, char *argv[])
{

  //Create a native windows shared memory object.
  windows_shared_memory shm (create_only, "MySharedMemory", read_write, 1000);

  //Map the whole shared memory in this process
  mapped_region region(shm, read_write);
  cout << "SIZE IS " << region.get_size() << endl;

return 0;
}
4

2 に答える 2

3

私は答えを得たと思います:ブーストドキュメントから:

ネイティブウィンドウの共有メモリにも別の制限があります。プロセスは、別のプロセスによって作成された共有メモリ全体を開いてマップできますが、そのメモリのサイズを知ることはできません。この制限はWindowsAPIによって課せられるため、ユーザーはセグメントを開くプロセスにセグメントのサイズを何らかの方法で送信する必要があります。

于 2010-07-29T20:59:33.940 に答える
1

使用しているコンストラクターのboost::interprocessドキュメントには、次のように書かれています。mapped_region

オフセット「offset」で始まる、マップされたメモリ「mapping」のマッピング領域を作成します。マッピングのサイズは「size」になります。マッピングは、読み取り専用の「read_only」または読み取り/書き込みの「read_write」に対して開くことができます。

したがって、ゼロ以外のサイズを指定すると、すべてが期待どおりに機能します。 mapped_region region(shm, read_write, 0, 1000);

于 2010-07-29T20:52:08.013 に答える