C++ 我可以多次访问boost::interprocess::managed_shared_内存而不必反复打开它吗?

C++ 我可以多次访问boost::interprocess::managed_shared_内存而不必反复打开它吗?,c++,boost,boost-interprocess,C++,Boost,Boost Interprocess,我正在使用boost::进程间::托管共享内存创建要跨进程共享的内存 以下是所采取的步骤: 台阶 a) Create memory. a) Open memory. b) Write to memory a) Open memory. b) Read from memory. c) Open memory. d) Read from memory. e) Open memory. f) Read from memory. g) ...... and so on and so forth!

我正在使用
boost::进程间::托管共享内存
创建要跨进程共享的内存

以下是所采取的步骤:

  • 台阶

    a) Create memory.
    
    a) Open memory. 
    b) Write to memory
    
    a) Open memory.
    b) Read from memory.
    c) Open memory.
    d) Read from memory.
    e) Open memory.
    f) Read from memory.
    g) ...... and so on and so forth!
    
  • 台阶

    a) Create memory.
    
    a) Open memory. 
    b) Write to memory
    
    a) Open memory.
    b) Read from memory.
    c) Open memory.
    d) Read from memory.
    e) Open memory.
    f) Read from memory.
    g) ...... and so on and so forth!
    
  • 台阶

    a) Create memory.
    
    a) Open memory. 
    b) Write to memory
    
    a) Open memory.
    b) Read from memory.
    c) Open memory.
    d) Read from memory.
    e) Open memory.
    f) Read from memory.
    g) ...... and so on and so forth!
    
  • 现在,问题是,在第三步中,我在阅读之前一次又一次地打开内存!我认为这是多余的行为

    我如何通过只打开一次来阅读多次


    实际上,open命令在性能方面非常昂贵,这被证明是我的应用程序中的一个瓶颈。

    为了简洁起见,许多示例在主函数中都有托管共享内存

    但是,您应该使它成为相关类的成员(负责管理共享内存映射的生存期)


    当然,您可以在main中将其作为局部变量保存,但随后您将被迫在任何函数调用中不断传递它。(我不建议将其设置为全局变量。或者将其设置为单例)。

    我们的想法应该是只打开共享资源(在本例中为内存)一次,并重复使用同一句柄/变量/对象来反复评估它

    以下任何一种方法都可以:

  • 如果所有访问都在单个函数中,请使用具有局部作用域的变量来维护共享内存的生存期。此外,如果所述方法具有不需要访问共享资源的其他语句,则资源本身可以被封装在一对
    {}
    中,以确保功能范围内的局部范围
  • 或者,可以将其另存为指针,并在工作流涉及调用使用共享资源的多个方法时传递函数

  • 将共享资源包装为对象(或指针)作为类的成员变量。所述类可以仅仅为了管理共享内存而创建,或者根据设计,正在利用资源的现有类可以占有所有权

  • 你就不能…不要一次又一次地打开它吗?你的代码到底是什么样子的,到底是什么错了?我试图在没有打开的情况下使用它,但是我不被允许访问内存!胡合。谢谢你的反馈