从SWIG typemap释放内存

2024-04-29 13:37:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图修复一个C++的DLL的Python包装中的内存泄漏。 问题是,将字节缓冲区分配给Python中创建的helper对象时:

struct ByteBuffer
{
    int length;
    uint8_t * dataBuf;       
};

我想将dataBuf作为一个Python数组提供,因此我提出的类型映射(并起作用)是:

^{pr2}$

问题是typemap每次都为新的C数组分配内存,而这个内存在dll中没有释放。换句话说,dll期望用户管理ByteBuffer的databuff的内存。例如,在Python中按顺序创建10000个这样的对象,然后删除它们时,内存使用量会稳步上升(泄漏):

for i in range(10000):
    byteBuffer = mymodule.ByteBuffer()
    byteBuffer.length = 10000
    byteBuffer.dataBuf = [0]*10000
    # ... use byteBuffer
    del byteBuffer

有没有办法从python中删除分配的dataBuf?谢谢你的耐心!在

编辑:我不发布整个工作代码以保持简短。如果需要,我会做的。另外,我使用的是python3.5x64和swigver3.0.7


Tags: 对象内存helper字节数组lengthstructint