本文记录一个内存测试,个人感觉不一定是对的,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 =