ctypes内存管理:如何以及何时释放分配的资源?

时间:2009-09-21 10:12:20

标签: python c memory 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 个答案:

答案 0 :(得分:4)

在这种情况下,您的MyPoint实例是在Python堆上分配的Python对象,因此不需要将其与任何其他Python对象区别对待。另一方面,如果您通过在MyPoint中调用allocate_point()来获得mylib.so实例,那么您需要使用为此提供的任何功能释放它,例如free_point(p)中的mylib.so