C ++ BOOST:windows共享内存get_size()返回零

时间:2010-07-29 18:07:59

标签: c++ boost boost-interprocess

以下内容来自官方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;
}

2 个答案:

答案 0 :(得分:3)

我想我得到了答案: 来自提升文档:

  

原生Windows共享内存也有   另一个限制:一个过程可以打开   并映射整个共享内存   由另一个进程创建,但它   不知道那是什么大小   记忆。这种限制是由   Windows API所以用户必须   以某种方式传输的大小   细分到流程开放   段。

答案 1 :(得分:1)

在您使用的mapped_region构造函数的boost::interprocess documentation中说:

  

创建映射的映射区域   内存“映射”,以偏移量开始   “offset”, 以及映射的大小   是“大小” 。映射可以打开   只读“read_only”或   读写“read_write。

因此,提供非零大小,一切都将按预期工作: mapped_region region(shm, read_write, 0, 1000);