gpt4 book ai didi

c - 保留 C 库中的 Ruby 对象,避免被垃圾回收

转载 作者:太空宇宙 更新时间:2023-11-04 04:38:24 25 4
gpt4 key购买 nike

我有一种情况,我需要从 C 结构中SOLELY 持有对 Ruby 对象(VALUE 的实例)的引用;即,创建 Ruby 对象并将其传递给 C 库。

目前,只要在我的 Ruby 应用程序中的某处,其他对象也引用该对象,Ruby 对象就会保持有效。但是一旦对该对象的唯一引用被 C 结构持有,垃圾收集就会收割它,因为标记和清除不再能找到它。

我需要一种方法让这些对象保持活力;即,我希望它们一直存在,直到 C 结构被释放或对象的引用被删除。

最佳答案

抱歉,我已经有一段时间没有跟进此事了。最后。

我曾尝试将 Ruby 对象附加到 C 结构的 Swig 包装器,但 Swig 不保证这些包装器是幂等的。 IOW,如果我得到一个 C 结构的包装器,然后请求对同一结构的另一个引用,那么这两个包装器是不同的对象并且不等同。

此外,如果 Swig 包装器对象超出范围,即使 C 结构没有被 GC,引用也会消失,我的 Ruby 对象也会被回收。

最后,解决方案是创建一个 Ruby 哈希并 Hook 到 C 库生命周期事件;即,当引用 Ruby 对象的 C 结构被 GC 时,然后从哈希中删除 Ruby 对象。

最后,这是唯一的方法。

关于c - 保留 C 库中的 Ruby 对象,避免被垃圾回收,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28900095/

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