我正在寻找一种至少我必须使用的漏水DLL症状的方法。虽然图书馆(OpenCascade)声称提供了一个内存管理器,但我仍然无法使其释放任何分配的内存。

我至少希望在“沙箱”中将对该模块的呼叫调用,以防止我的应用程序不丢失内存,而OCC模块甚至不再运行。

我的问题是:虽然我意识到这样做是一个丑陋的黑客(TM),但可以预先分配一系列记忆以被图书馆专门使用,或者在它周围建立某种沙盒,以便我可以跟踪他们完成的记忆区域以自己释放它们?

还是那是一个丑陋的黑客,我应该尝试解决这些问题?

有帮助吗?

解决方案

唯一的可靠方法是将库的使用分为专用过程。您将启动该过程,将数据和参数传递给它,运行库代码,检索结果。一旦确定内存消耗不再容忍,您就可以重新启动该过程。

其他提示

使用未破坏的库可能会容易得多,但是如果没有替换,则可以尝试拦截分配调用。如果库的“优化”(专门的功能内部),则可以拆卸并找到malloc和自由功能;加载时,您可以替换每4(或P64系统上的8个)字节序列,该字节序列编码该序列的指向您自己的内存分配器的地址。不过,这几乎可以保证是一个越野车,不可读的时代链,因此,如果您能找到工作替换,请不要这样做。

编辑:

看到 @sharptooth的答案,它的工作机会更好。我仍然建议尝试寻找替代品。

您应该询问罗马·莱金(Roman Lygin)的意见 - 他曾经在OCC上工作。他至少有一篇提到记忆管理的帖子 http://opencascade.blogspot.com/2009/06/developing-parallel-applications-with_23.html.

如果您很好地问,他甚至可能会写一篇解释MMGT的内部内容的帖子。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top