如何使用python ctypes管理字符串内存

Jay*_*esh 1 python ctypes memory-management

我的python代码在本机库中调用C函数(也是由我编写的).该函数接受两个字符串作为参数,并将其响应作为字符串返回.python传递给C库的两个参数字符串只能由C库读取,所以我并不担心它们的内存管理.AFAIK,它们的内存将由python分配,并在python运行时看起来合适时释放.

但是,据我所知,C库返回的字符串的内存必须明确管理.我可以实现它的一种方法是:C函数callocs一个字符数组,用answer填充它并从函数返回.python代码使用返回的字符串,应该在该字符串上调用libc的free,或者调用同一个C库的另一个函数来处理释放内存.

有没有其他方法可以做到这一点?ctype是否提供任何实用程序函数来简化释放本机库返回的数据结构的内存?

Sve*_*ach 5

我建议在一个名为via的外部函数中强烈反对内存分配,ctypes并从Python中释放这些内存.尽可能在Python中分配内存.

在您的情况下,如果您事先知道返回字符串长度的上限,请使用

buf = ctypes.create_string_buffer(upper_limt)
Run Code Online (Sandbox Code Playgroud)

在Python中分配内存并将指向此内存的指针传递给您的函数.