C ++ BOOST:Windows共享内存get_size()返回零
Posted
技术标签:
【中文标题】C ++ BOOST:Windows共享内存get_size()返回零【英文标题】:C++ BOOST: windows shared memory get_size() returns zero 【发布时间】: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;
【问题讨论】:
【参考方案1】:我想我得到了答案: 来自 boost 文档:
本机 windows 共享内存也有 另一个限制:进程可以打开 并映射整个共享内存 由另一个进程创建,但它 不知道哪个是那个大小 记忆。这个限制是由 Windows API,因此用户必须 以某种方式传输的大小 段到进程打开 段。
【讨论】:
【参考方案2】:在 boost::interprocess documentation 的 mapped_region
构造函数中,您正在使用它:
创建映射的映射区域 内存“映射”,从偏移量开始 "offset", 和映射的大小将 是“大小”。可以打开映射 对于只读“read_only”或 读写“read_write.
所以提供一个非零大小,一切都会按预期工作:
mapped_region region(shm, read_write, 0, 1000);
【讨论】:
不根据文档。 windows 中不应调用具有大小的 mapped_region。看我上面的回答以上是关于C ++ BOOST:Windows共享内存get_size()返回零的主要内容,如果未能解决你的问题,请参考以下文章
Windows 进程和 WSL Linux 进程之间的共享内存