【问题标题】:Boost C++ struct in shared memory via function通过函数在共享内存中提升 C++ 结构
【发布时间】:2016-02-23 07:47:23
【问题描述】:

我目前正在使用 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 语句离开函数,我的调试器就会显示,结构中的所有值都不再可访问。 (无法读取内存)

内存地址是正确的,我的调用行也收到了这个内存地址,但是一旦任何其他函数想要使用变量数据,它就会抛出访问冲突错误。

我完全不知道如何解决这个问题。我已经尝试在任何地方创建我的对象,然后将其移动到想要的地址。

如果你们能帮助我,那就太好了!

【问题讨论】:

    标签: c++ memory boost struct


    【解决方案1】:

    shared_memory_object 的生命周期在函数范围退出后立即结束,所以是的,你不能再引用共享内存对象了。

    shared_memory_object 保存在生命周期超出函数末尾的位置。

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

    【讨论】:

      猜你喜欢
      • 2015-09-25
      • 2013-01-11
      • 1970-01-01
      • 1970-01-01
      • 2012-09-27
      • 2013-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多