我可以将现有数组映射到`boost/interprocess/shared_memory_object`吗?

问题描述 投票:0回答:1

我想将现有的 C++ 数组共享给其他进程进行操作。我目前可以通过将其复制到

boost/interprocess/shared_memory_object
boost/interprocess/mapped_region
来做到这一点,即

contrib_shm = boost::interprocess::shared_memory_object(boost::interprocess::open_or_create,
                                                            contrib_mem_out.c_str(),
                                                          boost::interprocess::read_write);
contrib_shm.truncate(n * size_of_int);
boost::interprocess::mapped_region contrib_region(contrib_shm, boost::interprocess::read_write);
memcpy(contrib_region.get_address(), my_array_of_size_n, n* size_of_int);

我想知道我是否可以做到这一点:

contrib_shm = boost::interprocess::shared_memory_object(boost::interprocess::open_or_create,
                                                            contrib_mem_out.c_str(),
                                                          boost::interprocess::read_write);
contrib_shm.truncate(n * size_of_int);
boost::interprocess::mapped_region contrib_region(contrib_shm, boost::interprocess::read_write, 0, n * sizeof(int), (void *)my_array_of_size_n);

似乎我可以:https://www.boost.org/doc/libs/1_55_0/doc/html/interprocess/sharedmemory Betweenprocesses.html

但是当我尝试时,我不断得到

library_error

c++ boost shared-memory
1个回答
0
投票

不,你不能。

只要避免先将数组放在堆(或堆栈)上,稍微深思熟虑就可以了。这显然需要你提前映射内存。

我相信您尝试使用的记忆提示就是:提示。效果可能取决于平台,但有一件事肯定不会起作用:指向已映射的进程区域(在本例中为堆)的地址无法被遵守。

© www.soinside.com 2019 - 2024. All rights reserved.