問題タブ [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 投票する
2 に答える
1077 参照

c++ - shared_refがありません

多くの作業をしstd::shared_ptrていると、実装が見落とさshared_refれます。これはの特殊化であり、 (もちろん、適切な使用法が与えられshared_ptrた場合)決してラップしないことを保証します。nullptrなぜC++11規格にないのか不思議に思います。それを実施する際に市長の問題はありますか?頭のてっぺんには何も思いつかない。

編集:

私は次のようなインターフェースを期待しています:

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

java - Java でのスマート ポインターと参照カウント

Java で DagNode クラスを作成しようとしています。これにより、2 つのノードが参照として等しい場合に論理的に等しくなります。

C++ のアイデア (私は C++ 出身です) は、スマート ポインターと参照カウントを使用することです。

  • ノードが作成されると、そのノードが既に存在する場合はテーブルを検索します。もしそうなら、私は古いものへのポインタを返します。それ以外の場合は、新しいノードを作成します。

  • コピー コンストラクターやデストラクタなどのオーバーロードされた C++ メソッドは参照カウントを行い、ノードの参照カウントが 0 になると、ノードは上記のテーブルから削除されます。(C++ もメモリを解放します。)

ただし、Java で参照カウントを自動的に行う方法はないようです。(ガベージ コレクションを実行できるように) テーブルからノードを削除するタイミングを知るために、ref-counting を実行する必要があります。また、各関数の開始時と終了時に and を node->incRef()呼び出すことは避けたいと考えています。node->decRef()

この C++ イディオムを Java でどのように行うのでしょうか?

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

string - string := const : local と result の実装が異なるのはなぜですか?

Delphi 関数では、結果が var-parameter として実装されることがよくあります(QC チケットにもかかわらず out-parameter ではありません)。

文字列定数は、基本的に負の refcounter を持つ変数であり、自動メモリの [割り当て解除] を抑制する必要があります。http://docwiki.embarcadero.com/RADStudio/XE3/en/Internal_Data_Formats#Long_String_Types

それは本当にそれを抑制します: 以下のコードはリークしません。

しかし、操作変数を変更すると、すぐに大量のリークが始まります。

string := constLValue に応じて、さまざまな呼び出しで実装されていることがわかります。

  1. 結果: AnsiString -> LStrAsg
  2. 結果: UnicodeString: -> UStrAsg
  3. ローカル変数: UnicodeString: -> UStrLAsg
  4. ローカル変数: AnsiString: -> LStrLAsg

後者の 2 つは期待どおりにポインターを複製していますが、前の 2 つは、UniqueString呼び出しを追加した場合のように、文字列を新しいインスタンスにコピーしています。

なぜその違い?

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

objective-c - ARC 移行ツールが他のターゲットでエラーを返す

古いプロジェクトを ARC に変換しようとしています。私のプロジェクトは、サードパーティの非 ARC ライブラリである Cocos2D に依存しています。すべての Cocos2D ソース ファイルは別のターゲットの一部であり、静的ライブラリにコンパイルされます。

ARC semantic issueただし、変換しようとしているメイン ターゲットの一部ではないにもかかわらず、ARC 移行ツールは Cocos2D ソース ファイルでエラーを返します。

この理由は何でしょうか?そのソースコードは問題にならないはずですよね?

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

c++ - weak_ptrは、共有リソースの有効期限が切れたことをどのようにして知るのですか?

次のコードを検討します。

参照していたリソースが本質的に別のリソースに置き換えられたweak_ptrことを考慮して、期限切れになったことをどのようにして知ることができますか?古い共有リソースが破棄され、新しい共有リソースに置き換えられたことを確認するために、shared_ptrweak_ptrを追跡しますか?そのような方法の定義例(該当する場合)をいただければ幸いです。lockweak_ptr

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

python - リストにアクセスすると、参照カウントが変更されますか?

私が扱っている元の問題の概要をここに示します。元の問題に関連する追加の質問(Python参照カウントについて)をしたいと思います。

私が次のスクリプトを持っているとしましょう:

の参照カウントlist1list2またはいずれかのリスト内のオブジェクトのいずれかは、呼び出したときにある時点で変更されcalculate(list1,list2)ますか?

明確にするために:参照カウントが呼び出しの前後で同じになるかどうかを意味するものではありませんcalculate(list1,list2)。つまり、の実行中の任意の時点で参照カウントが変更された場合ですcalculate(list1,list2)

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

python - Python で一部のオブジェクトの参照カウントを無効にする

この質問はhereから派生しています。

Python オブジェクト ( l1l2およびl3) を含む 3 つの大きなリストがあります。これらのリストは、プログラムの起動時に作成され、合計 16 GB の RAM を使用します。このプログラムは Linux でのみ使用されます。

これらのリストまたはこれらのリスト内のオブジェクトは、作成後に何らかの方法または形式で変更する必要はありません。プログラムが終了するまで、それらはメモリに残っている必要があります。

プログラムで os.fork() と multiprocessing モジュールを使用して、複数のサブプロセス (現在は最大 20) を生成しています。l1これらの各サブプロセスは、3 つのリスト ( 、l2および)を読み取ることができる必要がありますl3

それ以外の場合、私のプログラムは正常に動作し、非常に高速です。ただし、メモリ消費に問題があります。Linux のコピー オン ライト アプローチにより、各サブプロセスが 3 つのリストをメモリにコピーせずに使用できることを期待していました。ただし、これらのリストのいずれかのオブジェクトを参照すると、関連する参照カウントが増加し、メモリのページ全体がコピーされるため、これは当てはまりません。

だから私の質問は次のようになります:

l1l2およびl3これらのリスト内のすべてのオブジェクトの参照カウントを無効にすることはできますか? 基本的に、オブジェクト全体 (参照カウントなどのメタデータを含む) を読み取り専用にして、いかなる状況でも変更されないようにします (これにより、コピーオンライトを利用できると思います)。

現在、私は現在必要のない「機能」(参照カウント)のために、このタスクを達成するために別のプログラミング言語に移動することを余儀なくされているのではないかと心配していますが、それでも私に強制され、不必要な問題を引き起こしています。

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

python - locals() の呼び出しで参照が追加されるのはなぜですか?

以下の動作がわかりません。

  • locals()新しい参照はどのように発生しますか?
  • gc.collect で削除されないのはなぜですか? locals()私はどこにも結果を割り当てませんでした。

バツ

出力は次のとおりです。