我正在使用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结构分配的内存的函数?
答案 0 :(得分:4)
在这种情况下,您的MyPoint
实例是在Python堆上分配的Python对象,因此不需要将其与任何其他Python对象区别对待。另一方面,如果您通过在MyPoint
中调用allocate_point()
来获得mylib.so
实例,那么您需要使用为此提供的任何功能释放它,例如free_point(p)
中的mylib.so
。