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

我想我得到了答案:来自 boost docs:

本机 Windows 共享内存还有另一个限制:一个进程可以打开并映射由另一个进程创建的整个共享内存,但它不知道该内存的大小。此限制是由 Windows API 施加的,因此用户必须以某种方式将段的大小传输给打开段的进程。

于 2010-07-29T20:59:33.940 回答
1

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

创建映射内存“mapping”的映射区域,从偏移“offset”开始,映射的大小将为“size”。可以为只读“read_only”或读写“read_write”打开映射。

所以提供一个非零大小,一切都会按预期工作: mapped_region region(shm, read_write, 0, 1000);

于 2010-07-29T20:52:08.013 回答