释放从 cffi 中的 c 函数传回的字符串的规范方法?
Canonical way to free string passed back from a c function in cffi?
ffi = FFI()
C = ffi.dlopen("mycffi.so")
ffi.cdef("""
char* foo(T *t);
void free_string(char *s);
""")
def get_foo(x):
cdata = C.foo(x)
s = ffi.string(cdata)
ret = s[:]
C.free_string(cdata)
return ret
如果我将 char *
从 c 函数传递给 python,python 应该释放内存。但是,我应该怎么做呢?
我目前的解决方法是复制python中的字符串,然后立即释放C中的字符串。因此 Python 可以自动处理 ret
使用的内存。
正确的做法是什么?
原来不需要复制s
,s
已经是cdata
的复制了
def get_foo(x):
cdata = C.foo(x)
s = ffi.string(cdata)
C.free_string(cdata)
return s
ffi = FFI()
C = ffi.dlopen("mycffi.so")
ffi.cdef("""
char* foo(T *t);
void free_string(char *s);
""")
def get_foo(x):
cdata = C.foo(x)
s = ffi.string(cdata)
ret = s[:]
C.free_string(cdata)
return ret
如果我将 char *
从 c 函数传递给 python,python 应该释放内存。但是,我应该怎么做呢?
我目前的解决方法是复制python中的字符串,然后立即释放C中的字符串。因此 Python 可以自动处理 ret
使用的内存。
正确的做法是什么?
原来不需要复制s
,s
已经是cdata
def get_foo(x):
cdata = C.foo(x)
s = ffi.string(cdata)
C.free_string(cdata)
return s