gpt4 book ai didi

python - 在处理 C 代码时是否存在任何 Python 引用计数/垃圾收集问题?

转载 作者:太空狗 更新时间:2023-10-29 22:20:29 24 4
gpt4 key购买 nike

只是为了纯粹的麻烦,我决定创建一个 Scheme binding to libpython这样你就可以在 Scheme 程序中嵌入 Python。我已经能够调用 Python 的 C API,但我还没有真正考虑过内存管理。

mzscheme 的 FFI 的工作方式是我可以调用一个函数,如果该函数返回一个指向 PyObject 的指针,那么我可以让它自动增加引用计数。然后,我可以注册一个终结器,它将在 Scheme 对象被垃圾回收时减少引用计数。我看过 documentation for reference counting ,并且乍一看没有发现任何问题(尽管在某些情况下它可能不是最佳选择)。有没有我遗漏的问题?

此外,我在制作 cyclic garbage collector documentation 的正反面时遇到了麻烦.在这里我需要注意什么?特别是,我如何让 Python 知道我有对某物的引用,以便在我仍在使用它时它不会收集它?

最佳答案

您指向 http://docs.python.org/extending/extending.html#reference-counts 的链接是正确的地方。文档的扩展和嵌入以及 Python/C API 部分将解释如何使用 C API。

引用计数是使用 C API 的恼人部分之一。主要问题是保持一切正常:根据您调用的 API 函数,您可能拥有也可能不拥有对您获得的对象的引用。请仔细了解您是否拥有它(因此不能忘记将其 DECREF 或将其交给会窃取它的东西)或正在借用它(并且必须 INCREF 它以保留它并可能在您的功能期间使用它)。与此相关的最常见错误是 1) 错误地记住您是否拥有由特定函数返回的引用,以及 2) 认为您可以安全地借用引用,时间比现在长。

您不必为循环垃圾收集器做任何特殊的事情。它只是用来修补引用计数中的一个缺陷,不需要直接访问。

关于python - 在处理 C 代码时是否存在任何 Python 引用计数/垃圾收集问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2935186/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com