【问题标题】:ctypes memory management: how and when free the allocated resources?ctypes 内存管理:如何以及何时释放分配的资源?
【发布时间】:2009-09-21 10:12:19
【问题描述】:

我正在用 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 结构分配的内存?

【问题讨论】:

    标签: python c memory ctypes


    【解决方案1】:

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

    【讨论】:

    • 所以我推断如果某个 C 函数调用时使用指向“p”的指针作为参数在某处保留它的副本(例如全局变量),那么在 Python GC 之后该引用将变得无效声称它,对吧?
    猜你喜欢
    • 1970-01-01
    • 2016-07-20
    • 1970-01-01
    • 1970-01-01
    • 2010-12-02
    • 2020-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多