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

标签 python memory-management ctypes

我的 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/

相关文章:

python - 如何使用ctypes(C++到Python)将opencv3 cv::Mat转换为numpy数组?

python - 如何在Python中为多个序列设置全局数值限制?

python - 部分字符串过滤pandas

python - 提高 Spark 应用程序的速度

linux pmap 了解在特定虚拟地址空间中运行的内容

c - 是否有可能在其自身前面有效地重新分配数据?

Python - 将字符串对象转换为 ctypes (unsigned char *)

python - ctypes vs _ctypes - 为什么后者存在?

Python win32 com : how to handle 'out' parameter?

c - 堆栈分配的内存与动态分配的内存