我想将现有的 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
。
不,你不能。
只要避免先将数组放在堆(或堆栈)上,稍微深思熟虑就可以了。这显然需要你提前映射内存。
我相信您尝试使用的记忆提示就是:提示。效果可能取决于平台,但有一件事肯定不会起作用:指向已映射的进程区域(在本例中为堆)的地址无法被遵守。