ctypes内存管理:如何及何时释放分配的资源?
我正在用Ctypes在Python中为一个C库写一个小的包装器,但我不确定从Python分配的结构体在超出作用域后是否会自动释放。
举个例子:
from ctypes import *
mylib = cdll.LoadLibrary("mylib.so")
class MyPoint(Structure):
_fields_ = [("x", c_int), ("y", c_int)]
def foo():
p = MyPoint()
#do something with the point
foo()
在foo函数返回后,那指针还会“活着”吗?我需要调用 clib.free(pointer(p))
来释放它吗?或者Ctypes有没有提供一个函数来释放为C结构体分配的内存?
1 个回答
5
在这种情况下,你的 MyPoint
实例是一个在 Python 堆上分配的对象,所以不需要特别对待它,和其他 Python 对象一样就可以了。不过,如果你是通过调用 mylib.so
中的 allocate_point()
来获得这个 MyPoint
实例,那么你就需要使用提供的某个函数来释放它,比如在 mylib.so
中的 free_point(p)
。