python destroy函数_C函数申请的内存,Python没法释放?

本文通过测试说明,在Python中调用C函数申请的内存,必须通过C函数的释放接口来释放,Python的`del`语句无法释放C函数malloc的内存。测试使用了`ctypes`和`memory_profiler`模块,结果显示,只有调用`destroy`函数内存才会被正确释放。

本文记录一个内存测试,个人感觉不一定是对的,anyway,先记录下来这个过程。Python调用C函数,C函数中有malloc申请内存,这块内存应该由谁来释放?

先说我的测试结论:还是要调用配套的C函数来释放,Python的del语句,没有释放C函数申请内存的效果。本文内存测试使用了memory_profiler模块。关于在Python中获取C函数返回的指正,请参考:再谈用ctypes获取C函数返回的指针

测试用C代码如下:

$ cat ccc.c

#include #include typedef struct {

int a;

int b;

float c;

} abc;

abc *init(int a, int b, float c)

{

abc *pt;

pt = (abc *)malloc(sizeof(abc));

pt->a = a;

pt->b = b;

pt->c = c;

return pt;

}

void destroy(abc *pt)

{

free(pt);

}

init申请内存,destroy释放内存。

先确定内存会因为调用init而增加,测试代码如下(Python):

$ cat mem_test.py

import struct

from ctypes import *

cc = CDLL('./ccc.so')

cc.init.restype = POINTER(c_char*12)

@profile

def test():

for i in range(50000):

p = cc

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值