我的 python 代码正在调用 native 库(也是我编写的)中的 C 函数。该函数将两个字符串作为参数并将其响应作为字符串返回。 python 传递给 C 库的两个参数字符串只被 C 库读取,所以我不担心它们的内存管理。 AFAIK,它们的内存将由 python 分配,并在 python 运行时认为合适时释放。
但是,据我所知,C 库返回的字符串的内存必须明确管理。我可以实现它的一种方法是:C 函数调用一个字符数组,用答案填充它并从函数返回。 python 代码使用返回的字符串,应该在该字符串上调用 libc 的 free 或调用同一 C 库的另一个函数,该函数将负责释放内存。
还有其他方法吗? ctype 是否提供任何实用函数来简化释放本地库返回的数据结构的内存?
最佳答案
我强烈建议不要在通过 ctypes
调用的外部函数中分配内存并从 Python 中释放此内存。尽可能在 Python 中分配内存。
在您的情况下,如果您事先知道返回字符串的长度上限,请使用
buf = ctypes.create_string_buffer(upper_limt)
在 Python 中分配内存并将指向该内存的指针传递给您的函数。
关于python - 如何使用 python ctypes 管理字符串内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6229610/