加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 03:40:35 所属栏目:百科 来源:网络整理
导读:只是为了它的纯粹,我决定创建一个 Scheme binding to libpython,这样你就可以在Scheme程序中嵌入Python.我已经能够调用Python的C API,但我还没有真正考虑过内存管理. mzscheme的FFI工作方式是我可以调用一个函数,如果该函数返回一个指向PyObject的指针,那么
只是为了它的纯粹,我决定创建一个 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函数,您可能拥有或不拥有对所获得对象的引用.要小心了解你是否拥有它(因此不能忘记将其删除或将其交给可以窃取它的东西)或借用它(并且必须包含它以保留它并可能在你的函数中使用它).涉及此问题的最常见错误是1)错误地记住您是否拥有特定函数返回的引用; 2)相信您可以安全地借用引用的时间比您更长.

您不必为循环垃圾收集器执行任何特殊操作.只是在那里修补引用计数中的缺陷并且不需要直接访问.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读