Mit*_*ren 11 python ctypes memory-leaks memory-management
我正在开发一个使用许多开源第三方库的Python应用程序.其中一个库是基于的ctypes,我最近在其中发现了10多个单独的内存泄漏.这些泄漏的原因包括对具有显式析构函数的对象的循环引用(Python不能垃圾收集),c_char_p以及作为返回非const字符数组的函数的返回类型(导致字符数组自动转换为Python字符串和原始的C分配数组永远不会被释放.)
我修复了我找到的泄漏并向库的作者提交了拉取请求.通过在循环中创建和删除对象并观察Python的内存使用情况,我做了一些非正式的测试,我认为我已经找到了所有泄漏.但是,由于我打算在我想开源的应用程序中使用这个库,并希望有其他一些人使用,我想比这更确定.所以我的问题是:是否有一种系统的方法来查找ctypes基于库的内存泄漏?
在修复我已经找到的泄漏的过程中,我尝试了Heapy和objgraph但是对于这个目的都没有特别有用.据我所知,它们都只显示在Python堆上分配的对象,因此它们对于查找由C库分配的堆空间处理不当引起的泄漏没有用处.我可以在Python中使用哪种工具可以显示C堆上的分配,最好还有哪些Python对象(如果有的话)引用分配的地址?