通过功能提升共享内存中的C++结构

Boost C++ struct in shared memory via function

本文关键字:C++ 结构 内存 共享 功能      更新时间:2023-10-16

我目前正在使用 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保存在生存期超过函数结束的位置。

通常的方法是类成员。您可以使函数成为同一类的成员,并保留对象实例。