問題タブ [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 - 基礎となるオブジェクトを変更するときに、ブースト共有ptrがコピーを作成しますか?
boost::shared_ptr<int> ptr
次の場合にコピーを作成します
上記の行の後にwasrefcount
が残っているとしますか? または何が起こりますか?新しいオブジェクトが割り当てられますか?3
3
python - Python 参照カウント
次の Python コードでは:
質問 0:
がbar()
で評価されるとprint baz().bar()
、Foo
によって返されたインスタンスはbaz()
まだガベージ コレクションされていません。
インスタンスfoo
の参照を格納する場所。Foo
質問1:
Foo と baz が C で Python 拡張モジュールに実装されている場合baz
、返されたオブジェクトの参照カウントをインクリメントしfoo
て 1 に設定する必要がありますか?
c++ - 参照カウンターにメモリ順序制限が必要なのはなぜですか?
の例でboost::atomic
は、unref
関数:
1: fetch_sub op は memory_order_release によって制限されます。これにより、前の操作がポイントを超えて並べ替えられるのを防ぎます。しかし、そのような現象が発生する可能性のあるシーンは何ですか?
2:アトミック opのmemory_order_releaseに加えて、削除の前に追加のmemory_order_acquireがあるのはなぜですか?
com - COM 参照カウント - 相互依存オブジェクト
Control
2 つの COM オブジェクトがあります (それらを と と呼びましょうJob
)。コントロールは CoCreatable で、Job オブジェクトは によって作成されControl.NewJob()
ます。
コントロールにはControl.Start(job)
、指定されたジョブを現在のジョブにするメソッドがあります。他のジョブが設定されていない限り、現在のジョブのままです。
クライアントの場合、これらの特定のコントロールに対して次の動作が妥当に見えます。
ジョブの 1 つが存在する限り、コントロールは存在します
(自明: ジョブは作成したコントロールへの強力な参照を保持します)。クライアントが Control またはその CurrentJob への参照を持っている限り、どちらも破棄されません (「自明」: CurrentJob は強力な参照です)。
クライアントは、参照を解放する前に CurrentJob を「クリア」する必要はありません。
さて、ここに古典的な循環参照があります。それを解放する条件は、両方のオブジェクトが外部参照を持たないことです。
このシナリオは、ATL の InternalRelease 実装をいじることで解決できますが、これは非常に見苦しく、孤立しています。
助言がありますか?既存のソリューション?
c# - C#に相当するARCはありますか
.NET (C#) 開発から来て、Objective-C コーディングを少し行ったときに、ARC (自動参照カウント) に出くわしました。
C++ (およびおそらく Objective-C) には決定論的な破壊セマンティクスがあることを私は知っており、ARC は同じ方向へのもう 1 つのステップのようです。
私はその内部構造に精通していませんが、(理論的なレベルで) ARC の同等物を (GC を使用する) .NET の上に後付けできるかどうか疑問に思っていました。
python - c python 拡張機能により、ガベージ コレクション エラーが原因で segfault で python スクリプトが終了する
文字列の配列を文字列のpythonリストに変換するために使用するCの次のルーチンがあります
このPyString_FromStringAndSize
関数は指定された文字列のコピーを作成するので、不要な文字列がコピーされるたびに解放し、それらの文字列のポインターのコンテナーを解放します。これはすべてうまくいくようです。sys.getrefcount
Python リストはスクリプトに返され、文字列はすべて適切に表示され、リスト内の文字列とリスト自体をチェックすると、参照カウントが適切に表示されます。
getrefcount の呼び出しによって一時的に 1 がインクリメントされるため、refcounts はすべて 2 を返します。コアダンプ分析に基づく参照カウントと関係があると確信しています
スクリプトの終了時にエラーが発生しており、ガベージ コレクターでクラッシュが発生していることを明確に確認できます。このエラーについて私が考えることができる唯一のことは、不適切な参照カウントです。
何かご意見は?
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 を失うと、サブインターフェイスを取得する際に問題が発生するため、その解決策を考案する必要があります....
garbage-collection - C のスタックベースのアプローチで参照カウントを実装する
C でインタープリターを作成していますが、参照カウントに問題があります。
それぞれvalue
(値のインタープリターの表現です...)にはrefcount
0が割り当てられます。スタックに追加されると、refcount
.
value
スタックをオフにする唯一の方法はポップすることですが、これは問題を引き起こします。私のポッピング関数は、value
ポップされた を返しますが、refcount
が 0 で値を破棄すると、それを返すことができなくなります。
おそらくチェックを別の場所に置くべきだと思いrefcount
ますが、ポップ機能を使用する場所がたくさんあるので、それは見苦しく思えます。
この問題を回避するにはどうすればよいですか? この場合、実際の GC アルゴリズムを実装する必要がありますか?
glib - glib 信号パラメーターで g_object_unref() を実行する必要がありますか?
信号をコールバック関数に接続すると、コールバック関数は渡されたパラメーターを取得します。オブジェクトがreference counter
コールバック関数に渡される前に増加していますか、それとも自分で増加させる必要がありますか?
gtk
orのドキュメントにはそのようなものは何も言及されていないため、そのための何らかの規則があるに違いないと思いますlibgobject
。