Skip to main content
 首页 » 编程设计

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

2025年05月04日23mengfanrong

我的 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 中分配内存并将指向该内存的指针传递给您的函数。