問題タブ [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 がゼロに等しい場合、オブジェクトは削除されます。これはモノスレッド プログラムでうまく機能し、ビッグ オブジェクトのコピーでパフォーマンスを大幅に向上させることができます。

ただし、マルチスレッドでは、オブジェクトがミューテックスによって保護されているため、2 つのスレッドが同じオブジェクトを同時に削除したい場合があります。1 つのスレッドだけがオブジェクトを削除し、もう 1 つのスレッドをブロックします。しかし、ミューテックスを解放すると、他のスレッドは無効な (解放されたオブジェクト) で実行を継続し、メモリの破損につながります。

このクラスRefCountedObjectの例を次に示します

2 つのスレッドが同じ RefCountedObject を削除したいとします。どちらも ~RefCountedObject にあり、Destroy() を呼び出します。最初のスレッドはミューテックスをロックしており、もう 1 つのスレッドは待機しています。最初のスレッドによってオブジェクトが削除された後、2 番目のスレッドはその実行を継続し、空きメモリへの書き込みを引き起こします。

誰もが同様の問題を経験し、解決策を見つけましたか?


助けてくれてありがとう、私は私の間違いに気づきました: ミューテックスは 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>
  • 次のオブジェクト作成の違いは何ですか。refです。すべての場合にカウンタが保持されますか?

    /li>
  • プロパティを割り当てるときは、ref です。属性として「代入」または「保持」が設定されているかどうかに関係なく、カウントは常に保持されますか?

0 投票する
3 に答える
6345 参照

c - アトミック参照カウント共有不変データにメモリバリアが必要ですか?

参照カウントを使用して管理し、SMP システム上のスレッド間でそれらを共有したい不変のデータ構造がいくつかあります。

リリースコードは次のようになります。

atomic_decその中にメモリバリアが必要ですか?もしそうなら、どのようなメモリバリアですか?

追加メモ: アプリケーションは PowerPC と x86 で実行する必要があるため、プロセッサ固有の情報を歓迎します。GCC アトミックビルトインについてはすでに知っています。不変性に関しては、refcount はオブジェクトの存続期間中に変化する唯一のフィールドです。

0 投票する
5 に答える
1395 参照

php - refcount が 1 ではなく 2 であるのはなぜですか?

出力:

出力:

アップデート

回答に非常にがっかりしました...

0 投票する
2 に答える
525 参照

python - Pythonrefcounts

つまり、Python Essential Reference、4ed。言う:

メモリリークが発生し、インタプリタはaとbを削除するために循環検出アルゴリズムを必要とします。ただし、refcountがどのようになっているのかを調べようとすると、最終的にaとbのrefcountが両方ともゼロになるため、循環検出アルゴリズムは必要ありません。好き:

refcounts:a = 1、b = 1

refcounts:a = 2、b = 2

refcounts:b ['a'] = 1、b = 1

refcounts:a = 0、b = 0

refcountsの私の理解の何が問題になっていますか?

0 投票する
3 に答える
650 参照

iphone - 参照カウントがゼロになったのに、機器がリークを報告したのはなぜですか

緑の手です。私は機器を使用していて、これまでのところ非常に役立ちましたが、今は混乱しています'メモリリークが報告され、そのリークされたブロック履歴は、そのメモリの参照カウントが最終的に0になったことを示しています。 。 どういう意味ですか?
ここに画像を投稿できなかったのは本当に恥ずかしいです...だからテキストで説明しなければなりません。それがあなたにとって十分に明確であることを願っています:

イベントタイプ|| RefCt || 責任ある図書館|| 責任ある発信者
Malloc|| 1 || MyWeather || + [ForecastData parseSingleForecastWithXMLElement:]自動リリース
|| || MyWeather || + [ForecastData parseSingleForecastWithXMLElement:]
保持|| 2 || MyWeather || + [ForecastData parseWithData:]
リリース|| 1 || 財団|| + [NSAutoreleasePoolドレイン:]
保持|| 2 || 財団|| + [NSThread initWithTarget:selector:object:]
リリース|| 1 || 財団|| + [NSString compare:options:]
リリース|| 0 || MyWeather || + [RootViewControllerdealloc]

どんな助けでもありがたいです〜