在共享内存C++中实例化对象

Bil*_*llC 8 c++ memory-management shared-memory

我们需要多个程序来调用公共库中的函数.库函数访问和更新公共全局内存.每个程序的函数调用都需要查看这个常见的全局内存.即使从另一个程序调用,这是一个函数调用需要查看任何先前函数调用的更新.出于兼容性原因,我们对共享库公开的函数必须如何操作有几个设计约束:

  • 无论代码运行的线程如何,所有调用者都必须可以看到全局声明的任何数据项(包括标准数据类型和对象).
  • 在函数中本地声明的任何数据项仅在该函数内可见.
  • 任何标准数据类型或任何类的实例都可以在本地或全局或两者中出现.

一种解决方案是将库的公共全局内存放在命名共享内存中.第一个库调用将创建命名共享内存并初始化它.后续程序调用将获取共享内存的地址,并将其用作指向全局数据结构的指针.全局声明的对象实例需要在共享内存中动态分配,而本地声明的对象实例可以放在堆栈或调用程序线程的本地堆中.出现问题是因为全局内存中的初始化对象可以创建并指向分配(新)附加内存的子对象.这些新分配还需要位于共享内存中,并且所有库调用者都可以看到.另一个复杂因素是这些对象,它们包含字符串,文件等,也可以在调用程序中使用.在调用程序中声明时,对象的内存对于调用程序是本地的,而不是共享的.所以对象的代码需要处理任何一种情况.在我们看来,解决方案将要求我们覆盖全局布局新的常规new和delete运算符.我们发现了一个内存管理系统的设计,它看起来会起作用,但我们还没有找到任何实际的实现.如果有人知道Nathan Myers的内存管理设计的实现(http://www.cantrip.org/wave12.html?seenIEPage=1),我将非常感谢它的链接.或者,如果有人知道另一个可以动态分配对象的共享内存管理器,我也很想知道它.我已经检查过Boost库以及我能找到的所有其他来源,但似乎没有任何东西可以做我们需要的东西.我们不想自己写一个.由于性能和稳健性很重要,因此使用经过验证的代码会很不错.提前感谢任何想法/帮助.

感谢有关ATL和OSSP库的建议.我现在正在检查它们虽然我害怕ATL太过Wincentric如果目标变成了Unix.

另外一件事我们现在似乎很清楚.由于可以在执行期间动态创建对象,因此内存管理方案必须能够分配额外的共享内存页面.现在开始看起来像一个完整的堆替换内存管理器.

vit*_*.ch 0

OSSP mm - 共享内存分配:

男3毫米