【发布时间】:2018-04-15 06:41:44
【问题描述】:
我有这个示例代码,它有一个函数 text() 返回一个新分配的字符串:
ffi_test = FFI()
ffi_test.set_source('_test', '''
char* test() { return strdup("hello world"); }
''')
ffi_test.cdef('''
char* test();
void free(void *);
''')
ffi_test.compile(verbose=True)
这很好用:
In [1]: from _test import ffi, lib
In [2]: x = lib.test()
In [3]: ffi.string(x)
Out[3]: b'hello world'
In [4]: lib.free(x)
但是,我在文档中找不到任何内容,无论我是否真的需要手动 free() 返回的字符串,如果 CFFI 在指针返回到 Python 代码后立即获得该指针的所有权。
另外,如果我确实需要手动 free() 它,我需要在我的 cdefs 中公开 free() 还是 CFFI 提供了一些更好的方法?
【问题讨论】:
-
当对象的“所有权”从一个软件组件传递到另一个软件组件时,新所有者将负责释放内存。因为这就是“所有权”的含义。
标签: python c memory-management free python-cffi