【问题标题】:C++ BOOST: windows shared memory get_size() returns zeroC ++ BOOST:Windows共享内存get_size()返回零
【发布时间】:2010-07-29 18:07:58
【问题描述】:

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

【问题讨论】:

    标签: c++ boost boost-interprocess


    【解决方案1】:

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

    本机 windows 共享内存也有 另一个限制:进程可以打开 并映射整个共享内存 由另一个进程创建,但它 不知道哪个是那个大小 记忆。这个限制是由 Windows API,因此用户必须 以某种方式传输的大小 段到进程打开 段。

    【讨论】:

      【解决方案2】:

      boost::interprocess documentationmapped_region 构造函数中,您正在使用它:

      创建映射的映射区域 内存“映射”,从偏移量开始 "offset", 和映射的大小将 是“大小”。可以打开映射 对于只读“read_only”或 读写“read_write.

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

      【讨论】:

      • 不根据文档。 windows 中不应调用具有大小的 mapped_region。看我上面的回答
      猜你喜欢
      • 2019-04-05
      • 2019-03-07
      • 1970-01-01
      • 2012-06-19
      • 2011-07-27
      • 1970-01-01
      • 1970-01-01
      • 2013-02-14
      • 2011-02-10
      相关资源
      最近更新 更多