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