使用 Python CType 时,存在允许您在 Python 端克隆 C 结构的结构,以及从内存地址值创建复杂 Python 对象并可用于通过引用来回传递对象的 POINTERS 对象 C代码。
我在文档或其他地方找不到的是,当包含从 C 代码返回指针(即为结构分配内存的 C 函数)取消引用的 Structure 类的 Python 对象本身被删除时会发生什么。原始C结构的内存是否被释放?如果不是怎么办?
此外,如果结构本身包含指向也由 C 函数分配的其他数据的指针,该怎么办?删除 Structure 对象是否会释放其成员上的指针? (我怀疑是这样)否则- -怎么办?尝试将结构中的指针从 Python 中“释放”出来,这对我来说会让 Python 崩溃。
换句话说,我用 c 函数调用填充了这个结构:
class PIX(ctypes.Structure):
"""Comments not generated
"""
_fields_ = [
("w", ctypes.c_uint32),
("h", ctypes.c_uint32),
("d", ctypes.c_uint32),
("wpl", ctypes.c_uint32),
("refcount", ctypes.c_uint32),
("xres", ctypes.c_uint32),
("yres", ctypes.c_uint32),
("informat", ctypes.c_int32),
("text", ctypes.POINTER(ctypes.c_char)),
("colormap", ctypes.POINTER(PIXCOLORMAP)),
("data", ctypes.POINTER(ctypes.c_uint32))
]
我想从 Python 代码中释放它正在使用的内存。