问题标签 [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 投票
7 回答
4971 浏览

c++ - C++:多线程和引用对象

我目前正在尝试将单线程程序传递给多线程。该软件大量使用“refCounted”对象,这导致了多线程中的一些问题。我正在寻找一些设计模式或可能解决我的问题的东西。

主要问题是线程之间的对象删除,通常删除只会减少引用计数,当 refcount 等于 0 时,则删除对象。这在单线程程序中运行良好,并且可以通过复制大对象来提高性能。

但是,在多线程中,两个线程可能希望同时删除同一个对象,因为该对象受互斥锁保护,只有一个线程删除该对象并阻止另一个。但是当它释放互斥锁时,另一个线程继续执行无效(释放的对象),这会导致内存损坏。

这是此类 RefCountedObject 的示例

假设两个线程要删除同一个 RefCountedObject,都在 ~RefCountedObject 中并调用 Destroy(),第一个线程已锁定互斥体,另一个正在等待。在第一个线程删除对象后,第二个线程将继续执行并导致空闲内存写入。

任何人都有类似问题的经验并找到了解决方案?


感谢大家的帮助,我意识到我的错误:互斥锁只保护 refCount 指针,而不是 refCount 本身!我创建了一个受互斥保护的 RefCount 类。互斥锁现在在所有 refCounted 对象之间共享。

现在一切正常。

0 投票
5 回答
3442 浏览

c++ - 为什么 shared_ptr 有一个显式的构造函数

我想知道为什么shared_ptr没有隐式构造函数。这里没有提到它的事实:为此获得 boost::shared_ptr

(我找到了原因,但认为无论如何发布这将是一个有趣的问题。)

0 投票
3 回答
4861 浏览

python - 为什么我的 Python C 扩展会泄漏内存?

下面的函数接受一个 python 文件句柄,从文件中读取打包的二进制数据,创建一个 Python 字典并返回它。如果我无休止地循环它,它将不断消耗 RAM。我的 RefCounting 有什么问题?

谢谢参观,

拉森MTL

0 投票
5 回答
43232 浏览

python - 有没有办法在 Python 中获取对象的当前引用计数?

有没有办法在 Python 中获取对象的当前引用计数?

0 投票
3 回答
2538 浏览

c++ - AddRef 和函数签名

我一直使用以下规则来签名函数的签名,这些函数根据它们是否执行 AddRef 来返回引用计数的对象,但也想向我的同事解释它......所以我的问题是,下面描述的规则是广泛遵循的规则?我正在寻找(例如)倡导这种风格的编码规则的指针。


如果函数没有添加对对象的引用,则应将其作为函数的返回值返回:

但是,如果函数添加对对象的引用,则对象的指针作为参数传递给函数:

0 投票
1 回答
143 浏览

iphone - Objective-C 内存处理 (iPhone)

我不能说我真的了解 Objective-C 中的内存处理,所以我对此有几个问题。

  • 我必须删除下面框中的对象“url”和“urlRequest”还是“urlConnection”负责这样做?

    /li>
  • 以下对象创建之间有什么区别。是参考。在所有情况下都保留计数器?

    /li>
  • 分配属性时,是参考。无论是否将“分配”或“保留”设置为属性,计数始终保留?

0 投票
3 回答
6345 浏览

c - 原子引用计数共享不可变数据是否需要内存屏障?

我有一些不可变的数据结构,我想使用引用计数来管理它们,在 SMP 系统上的线程之间共享它们。

发布代码如下所示:

atomic_dec需要内存屏障吗?如果是这样,什么样的内存屏障?

附加说明:该应用程序必须在 PowerPC 和 x86 上运行,因此欢迎提供任何特定于处理器的信息。我已经知道 GCC atomic builtins。至于不变性,引用计数是唯一在对象的持续时间内发生变化的字段。

0 投票
5 回答
1395 浏览

php - 为什么 refcount 是 2 而不是 1?

输出:

输出 :

更新

对答案很失望...

0 投票
2 回答
525 浏览

python - python 引用计数

所以 Python 基本参考,第 4 版。说:

造成内存泄漏,解释器需要循环检测算法来删除 a 和 b。但是,当我试图计算出引用计数时,在我看来,最后,a 和 b 的引用计数都归零,因此不需要循环检测算法。喜欢:

引用计数:a = 1,b = 1

引用计数:a = 2,b = 2

引用计数:b['a'] = 1,b = 1

引用计数:a = 0,b = 0

我对引用计数的理解有什么问题?

0 投票
3 回答
650 浏览

iphone - 为什么仪器报告泄漏而其参考计数确实变为零

我是新手。我正在使用工具,到目前为止它对我有很大帮助,但我现在很困惑,因为它向我报告了内存泄漏,而它泄露的块历史显示该内存的引用计数最终变为 0 。 这是什么意思?
在这里发不了图片真的很尴尬……所以我不得不用文字来描述它。希望对您来说足够清楚:

事件类型 || 参考 || 责任图书馆 || 负责任的来电者
Malloc || 1 || 我的天气 || +[ForecastData parseSingleForecastWithXMLElement:]
自动释放|| || 我的天气 || +[ForecastData parseSingleForecastWithXMLElement:]
保留 || 2 || 我的天气 || +[ForecastData parseWithData:]
发布 || 1 || 基金会 || +[NSAutoreleasePool 流失:]
保留 || 2 || 基金会 || +[NSThread initWithTarget:selector:object:]
释放 || 1 || 基金会 || +[NSString compare:options:]
发布 || 0 || 我的天气 || +[RootViewController 解除分配]

任何帮助将不胜感激~