问题标签 [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.
boost - boost shared ptr 在更改 undelying 对象时进行复制?
是否boost::shared_ptr<int> ptr
制作副本
假设refcount
是3
,在上面的行之后它会留下3
吗?或者会发生什么?会分配新对象吗?
python - Python 引用计数
在以下 Python 代码中:
问题0:
当在bar()
中进行评估时print baz().bar()
,是什么使Foo
返回的实例baz()
尚未被垃圾收集,因为似乎没有对它的引用,就像在:
在哪里foo
存储Foo
实例的引用。
问题一:
如果 Foo 和 baz 在 Python 扩展模块中用 C 实现,是否应该baz
增加返回对象的引用计数foo
以将其设置为 1?
c++ - 为什么引用计数器需要内存顺序限制?
在 的示例中boost::atomic
,unref
函数:
1: fetch_sub 操作受memory_order_release的限制,这可以防止先前的操作在该点之后重新排序。但是有哪些可能的场景会出现这种现象呢?
2: atomic op上除了memory_order_release之外,为什么删除前多了个memory_order_acquire?
com - COM 引用计数 - 相互依赖的对象
我有两个 COM 对象(我们称它们为Control
和Job
)。Control 是 CoCreatable,Job 对象由Control.NewJob()
.
Control 有一种方法Control.Start(job)
可以使指定的作业成为当前作业。只要没有设置其他作业,它就一直是当前作业。
现在对于客户端来说,对于这些特定控件,以下行为似乎是合理的:
只要其中一个作业存在,控制就存在
(微不足道:作业对它创建的控制持有强引用)只要客户端有对 Control 或其 CurrentJob 的引用,它们都不会被销毁(“微不足道”:CurrentJob 是一个强引用)
客户端在发布引用之前不需要“清除”CurrentJob
现在,我在这里有一个经典的循环引用,释放它的条件是两个对象都没有外部引用。
我可以通过处理 ATL 的 InternalRelease 实现来解决这种情况,但这非常丑陋和孤立。
有什么建议么?现有的解决方案?
c# - 是否有 C# 的 ARC 等价物
来自 .NET (C#) 开发以进行一些 Objective-C 编码,我偶然发现了 ARC(自动引用计数)。
我知道 C++(可能还有 Objective-C)具有确定性破坏语义,而 ARC 似乎是朝着同一方向迈出的又一步。
虽然我不熟悉它的内部结构,但我想知道(在理论上)是否可以在 .NET(使用 GC)之上改装 ARC 等价物。
python - c python扩展导致python脚本由于垃圾收集错误而退出segfault
我在 C 中有以下例程,用于将字符串数组转换为 python 字符串列表
该PyString_FromStringAndSize
函数会复制给定字符串,因此我在复制不必要的字符串时释放它们,然后释放这些字符串指针的容器。这一切似乎都很好。python 列表返回到脚本,所有字符串看起来都不错,当通过sys.getrefcount
列表中的字符串和列表本身检查时,引用计数看起来也不错。
refcounts 都返回 2,这似乎是正确的,因为对 getrefcount 的调用会导致临时增加 1。我很确定这与基于核心转储分析的引用计数有关
错误发生在脚本退出时,您可以清楚地看到垃圾收集器中正在发生崩溃。对于这个错误,我唯一能想到的就是错误的引用计数。
有什么想法吗?
delphi - 我可以在不调用隐藏的 try-finally 的情况下使用接口吗
我想重构 DelphiAST以使用接口来处理不同的类型,而不是它现在使用的笨重的 TDirectionary。
一些研究表明,70% 以上的运行时间都花在了字典上。
所以我将制作如下接口:
根据罗马的问题是:
引用计数可能会导致性能问题。DelphiAST 创建了数千个类来生成语法树(当输入文件足够大时,超过 100,000 个 TSyntaxNode 实例)。引用计数器会被调用多少次?
每次发生这种情况时try finally
都会调用 hidden ,这会减慢速度。
严格使用
const
in 方法参数可以防止引用计数代码调用该方法,但是每次您执行类似的操作时它仍然会发生MyRef = List[0]
- 它会增加分配给 的引用计数MyRef
,即使该项目仍然存在于列表中。
如何使用接口而不用担心 refcounting 和 try-finally 块?
我非常乐意手动管理类的破坏。
更多信息
我猜我需要TAggregatedObject
用作基础祖先。
而且我在某处读到不分配 GUID 会抑制引用计数,但必须提供资源来支持它。
但是,丢失 GUID 会导致获取子接口时出现问题,因此我必须为此设计一个解决方案....
garbage-collection - 在 C 中以基于堆栈的方法实现引用计数
我正在用 C 语言做解释器,但我的引用计数有问题。
每个value
(这是解释器的表示......一个值)都分配有refcount
0。一旦它被添加到堆栈中,它就会增加refcount
.
从堆栈中取出的唯一方法是将其value
从堆栈中弹出,但这会导致问题。我的弹出函数返回value
弹出的值,但如果refcount
是 0 并且我破坏了该值,我将无法再返回它。
我知道我可能应该把refcount
支票放在其他地方,但这看起来很难看,因为有很多地方使用弹出功能。
我可以做些什么来解决这个问题?在这种情况下是否需要实现真正的 GC 算法?
glib - 我需要对 glib 信号参数执行 g_object_unref() 吗?
当我将信号连接到回调函数时,回调函数会获取传递的参数。是在reference counter
对象传递给我的回调函数之前增加还是我必须自己增加它。
我想必须有某种约定,因为gtk
or的文档中没有提到类似的内容libgobject
。
c - 如何使用 CTFontCreateWithGraphicsFont 避免内存泄漏?
我已经将泄漏问题减少到这个易于编译的代码,它在CTFontCreateWithGraphicsFont
使用和发布后显示,将留下ct_font
一个额外的参考。cg_font
这是苹果内部的参考计数问题,还是我错过了一些东西,比如必须加倍发布cg_font
或更改发布顺序?谢谢。
编译运行后的结果:
ct_font:-1
cg_font:1