通过类内部的类提升进程间共享内存
boost interprocess shared memory with class inside class
需要在共享内存中创建一个结构。这是一个类的例子:
struct A{
std::string str1;
int val;
}
struct B{
A inner;
std::string name;
}
我在网上找不到这样的例子,但是经过一些搜索,我能够看到我可能需要实现一些分配器,并且像字符串这样的类型不应该被用作裸,因此,我为字符串创建了一个分配器,如下所示:
typedef allocator<char, ip::managed_shared_memory::segment_manager> char_alloc
class String2: public ip::basic_string<char, std::char_traits<char>, char_alloc > { public:
String2(char_alloc& _all): ip::basic_string<char, std::char_traits<char>, char_alloc >(_all) {;} };
但是现在我有一些问题试图理解我如何创建一个分配器,像这样为两个类工作。
有人有类似的例子吗?
Thanks in advance
您应该尝试使用char而不是std::string。
struct A{
char str1[64];
int val;
};
struct B{
A inner;
char name[64];
};
新的位置可能会有所帮助。假设您有一个指向共享内存的指针,其创建方式未知:
void* some_shared_mem; // initialized somehow
B* shared_B = new (some_shared_mem) B; // call the B constructor.
share_B->A.val = 5;
但是,您不应该将任何东西放入分配指针的共享内存中。即使您保证这些指针指向共享内存,您也不能确定共享内存的每个进程都在相同的地址看到共享内存。some_shared_mem
在某个程序中可能是0x10000,在其他程序中可能是0x20000。因此,即使共享指针是从共享内存中分配的(比如在0x10010),映射为0x20000的程序也会将点视为0x10010,从它的角度来看,这个点不在共享内存中。
这个答案来得有点晚,但是为了将来参考,Interprocess库中的"容器的容器"一节有这个确切的用例。
相关文章:
- 是否可以通过C++扩展强制多个python进程共享同一内存
- Directx 12 :在两个进程之间共享图形内存
- 子进程更新共享 mmap 内存,但父进程没有更改
- 如何在进程之间共享大量数据而不重复?(国际刑罚委员会)
- 提升进程间共享内存open_or_create每次都会引发异常
- 提升进程间共享内存删除、权限和输出文件
- 加速进程间:管理共享内存错误
- 使用互斥锁和条件变量增强跨内存的进程间共享向量
- std::unordered_map 在共享内存中使用 boost:::进程间分配器 - 缺点?
- 如何将我的 cli 信息(变量等)共享到子进程,这是一个 bash shell 脚本
- 提升进程间:在循环中分配共享内存
- 动态链接库 (.dll) 中的对象是否跨进程共享
- SYSTEM进程是否可以与非SYSTEM进程共享数据
- POSIX 跨进程共享内存同步 C++/C++11
- 可以跨进程共享的C++容器
- 两个进程共享同一个pcap文件
- ZeroMQ与分叉服务器中的所有子进程共享上下文
- Linux 信号量,跨分叉>exec'd 进程共享?
- C++多进程共享内存实现
- 使用boost::interprocess::shared_ptr实现跨进程共享生命周期