我们需要多个程序调用一个公共库中的函数。库函数访问和更新一个公共全局内存。每个程序的函数调用都需要看到这个公共全局内存。也就是说,一个函数调用需要看到先前任何函数调用的更新,即使是从另一个程序调用的。
由于兼容性原因,我们对共享库公开的函数操作有几个设计约束:
我们认为解决方案将需要覆盖全局放置 new、常规 new 和 delete 运算符。我们找到了一个内存管理系统的设计,看起来似乎能够工作,但我们没有找到任何实际的实现。如果有人知道 Nathan Myers 的内存管理设计的实现(http://www.cantrip.org/wave12.html?seenIEPage=1),我将感激提供链接。或者如果有人知道另一个适应动态分配对象的共享内存管理器,我也很想了解。我已经检查了 Boost 库和所有其他我能找到的来源,但似乎没有一个能做到我们需要的。我们希望不必自己编写一个。由于性能和稳健性很重要,使用经过验证的代码会很好。提前感谢任何想法/帮助。
感谢关于ATL和OSSP库的建议。我正在检查它们,尽管我担心如果我们的目标是Unix,ATL可能过于Wincentric。
现在还有一件事情对我们来说似乎很清楚。由于对象可以在执行期间动态创建,因此内存管理方案必须能够分配额外的共享内存页。这现在开始看起来像一个完整的堆替换内存管理器。
由于兼容性原因,我们对共享库公开的函数操作有几个设计约束:
- 任何声明为全局的数据项(包括标准数据类型和对象)必须对所有调用者可见,无论代码在哪个线程中运行。
- 在函数中声明的任何数据项仅在该函数内部可见。
- 任何标准数据类型或任何类的实例都可以出现在本地或全局或两者兼有。
我们认为解决方案将需要覆盖全局放置 new、常规 new 和 delete 运算符。我们找到了一个内存管理系统的设计,看起来似乎能够工作,但我们没有找到任何实际的实现。如果有人知道 Nathan Myers 的内存管理设计的实现(http://www.cantrip.org/wave12.html?seenIEPage=1),我将感激提供链接。或者如果有人知道另一个适应动态分配对象的共享内存管理器,我也很想了解。我已经检查了 Boost 库和所有其他我能找到的来源,但似乎没有一个能做到我们需要的。我们希望不必自己编写一个。由于性能和稳健性很重要,使用经过验证的代码会很好。提前感谢任何想法/帮助。
感谢关于ATL和OSSP库的建议。我正在检查它们,尽管我担心如果我们的目标是Unix,ATL可能过于Wincentric。
现在还有一件事情对我们来说似乎很清楚。由于对象可以在执行期间动态创建,因此内存管理方案必须能够分配额外的共享内存页。这现在开始看起来像一个完整的堆替换内存管理器。