【发布时间】:2020-02-17 14:42:31
【问题描述】:
当我创建一个新的boost::interprocess::managed_shared_memory 时,我可以看到C:\ProgramData\boost_interprocess\1571641094\NAME_OF_SHARED_MEMORY 中出现了一个文件,该文件的大小似乎与创建的共享内存的大小相匹配。
我从documention 的理解是,有两个广泛使用的对象可用于在进程之间共享内存(在managed_shared_memory 的范围内):
- basic_managed_shared_memory
- basic_managed_mapped_file
managed_shared_memory 使用basic_managed_shared_memory 实现。我认为这个实现是正确的共享内存,而不是内存映射文件。
看到它使用文件让我感到困惑。这两个托管共享内存都基于内存映射文件实现吗?
Windows 上唯一避免内存映射文件的 boost 共享内存解决方案是 windows_shared_memory 吗?
注意:我在 Windows 10 上,在 VS2013 上使用 VC++。
使用managed_shared_memory 时可以重现在ProgramData 中创建文件的行为的代码示例:
#include <boost/interprocess/managed_shared_memory.hpp>
int main(int argc, char *argv[])
{
boost::interprocess::permissions permissions;
permissions.set_unrestricted();
boost::interprocess::managed_shared_memory* sharedMemory;
sharedMemory = new boost::interprocess::managed_shared_memory(
{
boost::interprocess::open_or_create,
"NAME_OF_SHARED_MEMORY",
400000,
0,
permissions
}
);
return 0;
}
【问题讨论】:
标签: c++ boost shared-memory boost-interprocess