问题标签 [refcounting]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
19 浏览

boost - boost shared ptr 在更改 undelying 对象时进行复制?

是否boost::shared_ptr<int> ptr制作副本

假设refcount3,在上面的行之后它会留下3吗?或者会发生什么?会分配新对象吗?

0 投票
2 回答
382 浏览

python - Python 引用计数

在以下 Python 代码中:

问题0:

当在bar()中进行评估时print baz().bar(),是什么使Foo返回的实例baz()尚未被垃圾收集,因为似乎没有对它的引用,就像在:

在哪里foo存储Foo实例的引用。

问题一:

如果 Foo 和 baz 在 Python 扩展模块中用 C 实现,是否应该baz增加返回对象的引用计数foo以将其设置为 1?

0 投票
1 回答
251 浏览

c++ - 为什么引用计数器需要内存顺序限制?

在 的示例中boost::atomicunref函数:

1: fetch_sub 操作受memory_order_release的限制,这可以防止先前的操作在该点之后重新排序。但是有哪些可能的场景会出现这种现象呢?

2: atomic op上除了memory_order_release之外,为什么删除前多了个memory_order_acquire

0 投票
2 回答
108 浏览

com - COM 引用计数 - 相互依赖的对象

我有两个 COM 对象(我们称它们为ControlJob)。Control 是 CoCreatable,Job 对象由Control.NewJob().

Control 有一种方法Control.Start(job)可以使指定的作业成为当前作业。只要没有设置其他作业,它就一直是当前作业。

现在对于客户端来说,对于这些特定控件,以下行为似乎是合理的:

  • 只要其中一个作业存在,控制就存在
    (微不足道:作业对它创建的控制持有强引用)

  • 只要客户端有对 Control 或其 CurrentJob 的引用,它们都不会被销毁(“微不足道”:CurrentJob 是一个强引用)

  • 客户端在发布引用之前不需要“清除”CurrentJob

现在,我在这里有一个经典的循环引用,释放它的条件是两个对象都没有外部引用。

可以通过处理 ATL 的 InternalRelease 实现来解决这种情况,但这非常丑陋和孤立。

有什么建议么?现有的解决方案?

0 投票
1 回答
802 浏览

c# - 是否有 C# 的 ARC 等价物

来自 .NET (C#) 开发以进行一些 Objective-C 编码,我偶然发现了 ARC(自动引用计数)。

我知道 C++(可能还有 Objective-C)具有确定性破坏语义,而 ARC 似乎是朝着同一方向迈出的又一步。

虽然我不熟悉它的内部结构,但我想知道(在理论上)是否可以在 .NET(使用 GC)之上改装 ARC 等价物。

0 投票
1 回答
400 浏览

python - c python扩展导致python脚本由于垃圾收集错误而退出segfault

我在 C 中有以下例程,用于将字符串数组转换为 python 字符串列表

PyString_FromStringAndSize函数会复制给定字符串,因此我在复制不必要的字符串时释放它们,然后释放这些字符串指针的容器。这一切似乎都很好。python 列表返回到脚本,所有字符串看起来都不错,当通过sys.getrefcount列表中的字符串和列表本身检查时,引用计数看起来也不错。

refcounts 都返回 2,这似乎是正确的,因为对 getrefcount 的调用会导致临时增加 1。我很确定这与基于核心转储分析的引用计数有关

错误发生在脚本退出时,您可以清楚地看到垃圾收集器中正在发生崩溃。对于这个错误,我唯一能想到的就是错误的引用计数。

有什么想法吗?

0 投票
3 回答
244 浏览

delphi - 我可以在不调用隐藏的 try-finally 的情况下使用接口吗

我想重构 DelphiAST以使用接口来处理不同的类型,而不是它现在使用的笨重的 TDirectionary。

一些研究表明,70% 以上的运行时间都花在了字典上。

所以我将制作如下接口:

根据罗马的问题是:

引用计数可能会导致性能问题。DelphiAST 创建了数千个类来生成语法树(当输入文件足够大时,超过 100,000 个 TSyntaxNode 实例)。引用计数器会被调用多少次?

每次发生这种情况时try finally都会调用 hidden ,这会减慢速度。

严格使用constin 方法参数可以防止引用计数代码调用该方法,但是每次您执行类似的操作时它仍然会发生MyRef = List[0]- 它会增加分配给 的引用计数MyRef,即使该项目仍然存在于列表中。

如何使用接口而不用担心 refcounting 和 try-finally 块?
我非常乐意手动管理类的破坏。

更多信息
我猜我需要TAggregatedObject用作基础祖先。
而且我在某处读到不分配 GUID 会抑制引用计数,但必须提供资源来支持它。
但是,丢失 GUID 会导致获取子接口时出现问题,因此我必须为此设计一个解决方案....

0 投票
3 回答
114 浏览

garbage-collection - 在 C 中以基于堆栈的方法实现引用计数

我正在用 C 语言做解释器,但我的引用计数有问题。

每个value(这是解释器的表示......一个值)都分配有refcount0。一旦它被添加到堆栈中,它就会增加refcount.

从堆栈中取出的唯一方法是将其value从堆栈中弹出,但这会导致问题。我的弹出函数返回value弹出的值,但如果refcount是 0 并且我破坏了该值,我将无法再返回它。

我知道我可能应该把refcount支票放在其他地方,但这看起来很难看,因为有很多地方使用弹出功能。

我可以做些什么来解决这个问题?在这种情况下是否需要实现真正的 GC 算法?

0 投票
1 回答
206 浏览

glib - 我需要对 glib 信号参数执行 g_object_unref() 吗?

当我将信号连接到回调函数时,回调函数会获取传递的参数。是在reference counter对象传递给我的回调函数之前增加还是我必须自己增加它。

我想必须有某种约定,因为gtkor的文档中没有提到类似的内容libgobject

0 投票
1 回答
502 浏览

c - 如何使用 CTFontCreateWithGraphicsFont 避免内存泄漏?

我已经将泄漏问题减少到这个易于编译的代码,它在CTFontCreateWithGraphicsFont使用和发布后显示,将留下ct_font一个额外的参考。cg_font这是苹果内部的参考计数问题,还是我错过了一些东西,比如必须加倍发布cg_font或更改发布顺序?谢谢。

编译运行后的结果:

ct_font:-1

cg_font:1