問題タブ [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 - 基礎となるオブジェクトを変更するときに、ブースト共有ptrがコピーを作成しますか?

boost::shared_ptr<int> ptr次の場合にコピーを作成します

上記の行の後にwasrefcountが残っているとしますか? または何が起こりますか?新しいオブジェクトが割り当てられますか?33

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

python - Python 参照カウント

次の Python コードでは:

質問 0:

bar()で評価されるとprint baz().bar()Fooによって返されたインスタンスはbaz()まだガベージ コレクションされていません。

インスタンスfooの参照を格納する場所。Foo

質問1:

Foo と baz が C で Python 拡張モジュールに実装されている場合baz、返されたオブジェクトの参照カウントをインクリメントしfooて 1 に設定する必要がありますか?

0 投票する
1 に答える
251 参照

c++ - 参照カウンターにメモリ順序制限が必要なのはなぜですか?

の例でboost::atomicは、unref関数:

1: fetch_sub op は memory_order_release によって制限されます。これにより、前の操作がポイントを超えて並べ替えられるのを防ぎます。しかし、そのような現象が発生する可能性のあるシーンは何ですか?

2:アトミック opのmemory_order_releaseに加えて、削除の前に追加のmemory_order_acquireがあるのはなぜですか?

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

com - COM 参照カウント - 相互依存オブジェクト

Control2 つの COM オブジェクトがあります (それらを と と呼びましょうJob)。コントロールは CoCreatable で、Job オブジェクトは によって作成されControl.NewJob()ます。

コントロールにはControl.Start(job)、指定されたジョブを現在のジョブにするメソッドがあります。他のジョブが設定されていない限り、現在のジョブのままです。

クライアントの場合、これらの特定のコントロールに対して次の動作が妥当に見えます。

  • ジョブの 1 つが存在する限り、コントロールは存在します
    (自明: ジョブは作成したコントロールへの強力な参照を保持します)。

  • クライアントが Control またはその CurrentJob への参照を持っている限り、どちらも破棄されません (「自明」: CurrentJob は強力な参照です)。

  • クライアントは、参照を解放する前に CurrentJob を「クリア」する必要はありません。

さて、ここに古典的な循環参照があります。それを解放する条件は、両方のオブジェクトが外部参照を持たないことです。

このシナリオは、ATL の InternalRelease 実装をいじることで解決できますが、これは非常に見苦しく、孤立しています

助言がありますか?既存のソリューション?

0 投票する
1 に答える
802 参照

c# - C#に相当するARCはありますか

.NET (C#) 開発から来て、Objective-C コーディングを少し行ったときに、ARC (自動参照カウント) に出くわしました。

C++ (およびおそらく Objective-C) には決定論的な破壊セマンティクスがあることを私は知っており、ARC は同じ方向へのもう 1 つのステップのようです。

私はその内部構造に精通していませんが、(理論的なレベルで) ARC の同等物を (GC を使用する) .NET の上に後付けできるかどうか疑問に思っていました。

0 投票する
1 に答える
400 参照

python - c python 拡張機能により、ガベージ コレクション エラーが原因で segfault で python スクリプトが終了する

文字列の配列を文字列のpythonリストに変換するために使用するCの次のルーチンがあります

このPyString_FromStringAndSize関数は指定された文字列のコピーを作成するので、不要な文字列がコピーされるたびに解放し、それらの文字列のポインターのコンテナーを解放します。これはすべてうまくいくようです。sys.getrefcountPython リストはスクリプトに返され、文字列はすべて適切に表示され、リスト内の文字列とリスト自体をチェックすると、参照カウントが適切に表示されます。

getrefcount の呼び出しによって一時的に 1 がインクリメントされるため、refcounts はすべて 2 を返します。コアダンプ分析に基づく参照カウントと関係があると確信しています

スクリプトの終了時にエラーが発生しており、ガベージ コレクターでクラッシュが発生していることを明確に確認できます。このエラーについて私が考えることができる唯一のことは、不適切な参照カウントです。

何かご意見は?

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

delphi - 非表示の try-finally を呼び出さずにインターフェイスを使用できますか

DelphiAST をリファクタリングして、現在使用している不格好な TDirectionary ではなく、インターフェイスを使用してさまざまな型を処理したいと考えています。

一部の調査では、実行時間の 70% 以上が辞書で費やされていることが示されています。

したがって、次のようなインターフェイスを作成します。

ローマンによると、問題は次のとおりです。

参照カウントは、パフォーマンスの問題を引き起こす可能性があります。DelphiAST は、構文ツリーを生成するために何千ものクラスを作成します(入力ファイルが十分に大きい場合、100,000 を超える TSyntaxNode インスタンス)。参照カウンターは何回呼び出されますか?

これが発生するたびに、hiddentry finallyが呼び出され、処理が遅くなります。

in method params を厳密に使用するとconst、refcount コードがメソッドを呼び出すのを防ぐことができますが、たとえば、次のようなことを行うたびに発生することがわかっています。項目がまだリストに存在していても、 に MyRef = List[0]割り当てられている refcount が増加します。MyRef

refcounting と try-finally ブロックを気にせずにインターフェイスを操作するにはどうすればよいですか?
クラスの破棄を手動で管理できることを非常にうれしく思います。

詳細情報
私はTAggregatedObject、基本の祖先として使用する必要があると推測しています。
そして、GUIDを割り当てないと参照カウントが阻害されることをどこかで読みましたが、それを裏付けるためにソースを作成する必要があります。
ただし、GUID を失うと、サブインターフェイスを取得する際に問題が発生するため、その解決策を考案する必要があります....

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

garbage-collection - C のスタックベースのアプローチで参照カウントを実装する

C でインタープリターを作成していますが、参照カウントに問題があります。

それぞれvalue(値のインタープリターの表現です...)にはrefcount0が割り当てられます。スタックに追加されると、refcount.

valueスタックをオフにする唯一の方法はポップすることですが、これは問題を引き起こします。私のポッピング関数は、valueポップされた を返しますが、refcountが 0 で値を破棄すると、それを返すことができなくなります。

おそらくチェックを別の場所に置くべきだと思いrefcountますが、ポップ機能を使用する場所がたくさんあるので、それは見苦しく思えます。

この問題を回避するにはどうすればよいですか? この場合、実際の G​​C アルゴリズムを実装する必要がありますか?

0 投票する
1 に答える
206 参照

glib - glib 信号パラメーターで g_object_unref() を実行する必要がありますか?

信号をコールバック関数に接続すると、コールバック関数は渡されたパラメーターを取得します。オブジェクトがreference counterコールバック関数に渡される前に増加していますか、それとも自分で増加させる必要がありますか?

gtkorのドキュメントにはそのようなものは何も言及されていないため、そのための何らかの規則があるに違いないと思いますlibgobject