在Sandboxing内存泄漏的第三方DLL

我正在寻找一种方法来治愈至少我必须使用的漏洞DLL的症状。虽然库(OpenCascade)声称提供了一个内存管理器,但我还是无法释放它分配的任何内存。 我至少希望将这个模块的调用放在“沙箱”中,以便在OCC模块甚至不再运行时保持我的应用程序不会丢失内存。 我的问题是:虽然我意识到这将是一个UGLY HACK(TM)这样做,是否可以预先分配一段内存供图书馆专门使用,或者围绕它构建某种沙盒以便我可以跟踪他们使用的内存区域,以便在我完成时自行释放它们? 或者那是丑陋的黑客,我应该尝试解决问题呢?     
已邀请:
唯一可靠的方法是将库的使用分成专用的过程。您将启动该过程,将数据和参数传递给它,运行库代码,检索结果。一旦确定不再容许内存消耗,就可以重新启动该过程。     
使用未破坏的库可能会容易得多,但如果替换不可用,您可以尝试拦截分配调用。如果库没有太“优化”(特别是函数内联),你可以反汇编它并找到malloc和free函数;在加载时,你可以用一个指向你自己的内存分配器的字节序列替换每个编码该地址的4(或8个p64系统)字节序列。这几乎可以肯定是一个有缺陷的,不可读的时间段,所以如果你能找到一个有效的替代品,不要这样做。 编辑: 看到@ sharptooth的答案,它有更好的工作机会。我仍然建议尝试寻找替代品。     
你应该问Roman Lygin的观点 - 他曾经在occ工作过。他至少有一篇提到内存管理的帖子http://opencascade.blogspot.com/2009/06/developing-parallel-applications-with_23.html。 如果你问得很好,他甚至可能会写一篇解释mmgt's internals的帖子。     

要回复问题请先登录注册