通过功能提升共享内存中的C++结构
Boost C++ struct in shared memory via function
我目前正在使用 Boost 库来创建一个简单的 IPC。我决定将shared_memory_object的创建和结构的分配外包给一个函数。这是我的函数连接:
shared_data* connect(char *name){
//open or create shared memory object
shared_memory_object shm_obj(open_or_create, name, read_write);
offset_t size;
shm_obj.get_size(size);
shared_data * data;
//newly created
if(size == 0){
//set size
shm_obj.truncate(sizeof(data));
//map region to process
mapped_region region(shm_obj, read_write);
//get adress from region
void * addr = region.get_address();
//save structure to memory
data = new (addr) shared_data;
return static_cast<shared_data *>(addr);
//or return data;
}
它由以下人员调用:
shared_data * data = connect("shared_memory");
在主函数中。
但是一旦程序通过 return 语句离开函数,我的调试器就会显示结构中的所有值都不再可访问。(无法读取内存)
内存地址是正确的,我的调用线路也接收此内存地址,但是一旦任何其他函数想要处理变量数据,它就会引发访问冲突错误。
我完全不知道如何解决这个问题。我已经尝试在任何地方创建我的对象,然后将其移动到所需的地址。
如果你们能帮助我,那就太好了!
一旦函数作用域退出,shared_memory_object
的生命周期就会结束,所以是的,你不能再引用共享内存对象了。
将shared_memory_object
保存在生存期超过函数结束的位置。
通常的方法是类成员。您可以使函数成为同一类的成员,并保留对象实例。
相关文章:
- 如何循环打印顶点结构
- 通过方法访问结构
- 使用不带参数的函数访问结构元素
- 预处理器:插入结构名称中的前一个行号
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 孤立代码块在结构中引发异常
- 有什么方法可以遍历结构吗
- 如何在 C# 中映射双 C 结构指针?
- 如何在C++中使用结构生成映射
- 无法将结构注册为增强几何体3D点
- 多成员Constexpr结构初始化
- C++将文本文件中的数据读取到结构数组中
- 如何重构类层次结构以避免菱形问题
- 如何在C++中序列化结构数据
- std::vector的包装器,使数组的结构看起来像结构的数组
- 没有为自己的结构调用列表推回方法
- 奇怪的结构&GCC&clang(void*返回类型)
- 在 c++ 中拥有一组结构的正确方法是什么?
- vscode g++链路故障:体系结构x86_64的未定义符号
- C++概念:如何使用'concept'检查模板化结构的属性?