問題タブ [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.
c++ - shared_refがありません
多くの作業をしstd::shared_ptr
ていると、実装が見落とさshared_ref
れます。これはの特殊化であり、 (もちろん、適切な使用法が与えられshared_ptr
た場合)決してラップしないことを保証します。nullptr
なぜC++11規格にないのか不思議に思います。それを実施する際に市長の問題はありますか?頭のてっぺんには何も思いつかない。
編集:
私は次のようなインターフェースを期待しています:
java - Java でのスマート ポインターと参照カウント
Java で DagNode クラスを作成しようとしています。これにより、2 つのノードが参照として等しい場合に論理的に等しくなります。
C++ のアイデア (私は C++ 出身です) は、スマート ポインターと参照カウントを使用することです。
ノードが作成されると、そのノードが既に存在する場合はテーブルを検索します。もしそうなら、私は古いものへのポインタを返します。それ以外の場合は、新しいノードを作成します。
コピー コンストラクターやデストラクタなどのオーバーロードされた C++ メソッドは参照カウントを行い、ノードの参照カウントが 0 になると、ノードは上記のテーブルから削除されます。(C++ もメモリを解放します。)
ただし、Java で参照カウントを自動的に行う方法はないようです。(ガベージ コレクションを実行できるように) テーブルからノードを削除するタイミングを知るために、ref-counting を実行する必要があります。また、各関数の開始時と終了時に and を node->incRef()
呼び出すことは避けたいと考えています。node->decRef()
この C++ イディオムを Java でどのように行うのでしょうか?
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 := const
LValue に応じて、さまざまな呼び出しで実装されていることがわかります。
- 結果: AnsiString -> LStrAsg
- 結果: UnicodeString: -> UStrAsg
- ローカル変数: UnicodeString: -> UStrLAsg
- ローカル変数: AnsiString: -> LStrLAsg
後者の 2 つは期待どおりにポインターを複製していますが、前の 2 つは、UniqueString
呼び出しを追加した場合のように、文字列を新しいインスタンスにコピーしています。
なぜその違い?
objective-c - ARC 移行ツールが他のターゲットでエラーを返す
古いプロジェクトを ARC に変換しようとしています。私のプロジェクトは、サードパーティの非 ARC ライブラリである Cocos2D に依存しています。すべての Cocos2D ソース ファイルは別のターゲットの一部であり、静的ライブラリにコンパイルされます。
ARC semantic issue
ただし、変換しようとしているメイン ターゲットの一部ではないにもかかわらず、ARC 移行ツールは Cocos2D ソース ファイルでエラーを返します。
この理由は何でしょうか?そのソースコードは問題にならないはずですよね?
c++ - weak_ptrは、共有リソースの有効期限が切れたことをどのようにして知るのですか?
次のコードを検討します。
参照していたリソースが本質的に別のリソースに置き換えられたweak_ptr
ことを考慮して、期限切れになったことをどのようにして知ることができますか?古い共有リソースが破棄され、新しい共有リソースに置き換えられたことを確認するために、shared_ptr
何weak_ptr
を追跡しますか?そのような方法の定義例(該当する場合)をいただければ幸いです。lock
weak_ptr
python - リストにアクセスすると、参照カウントが変更されますか?
私が扱っている元の問題の概要をここに示します。元の問題に関連する追加の質問(Python参照カウントについて)をしたいと思います。
私が次のスクリプトを持っているとしましょう:
の参照カウントlist1
、list2
またはいずれかのリスト内のオブジェクトのいずれかは、呼び出したときにある時点で変更されcalculate(list1,list2)
ますか?
明確にするために:参照カウントが呼び出しの前後で同じになるかどうかを意味するものではありませんcalculate(list1,list2)
。つまり、の実行中の任意の時点で参照カウントが変更された場合ですcalculate(list1,list2)
。
python - Python で一部のオブジェクトの参照カウントを無効にする
この質問はhereから派生しています。
Python オブジェクト ( l1
、l2
およびl3
) を含む 3 つの大きなリストがあります。これらのリストは、プログラムの起動時に作成され、合計 16 GB の RAM を使用します。このプログラムは Linux でのみ使用されます。
これらのリストまたはこれらのリスト内のオブジェクトは、作成後に何らかの方法または形式で変更する必要はありません。プログラムが終了するまで、それらはメモリに残っている必要があります。
プログラムで os.fork() と multiprocessing モジュールを使用して、複数のサブプロセス (現在は最大 20) を生成しています。l1
これらの各サブプロセスは、3 つのリスト ( 、l2
および)を読み取ることができる必要がありますl3
。
それ以外の場合、私のプログラムは正常に動作し、非常に高速です。ただし、メモリ消費に問題があります。Linux のコピー オン ライト アプローチにより、各サブプロセスが 3 つのリストをメモリにコピーせずに使用できることを期待していました。ただし、これらのリストのいずれかのオブジェクトを参照すると、関連する参照カウントが増加し、メモリのページ全体がコピーされるため、これは当てはまりません。
だから私の質問は次のようになります:
l1
、l2
およびl3
これらのリスト内のすべてのオブジェクトの参照カウントを無効にすることはできますか? 基本的に、オブジェクト全体 (参照カウントなどのメタデータを含む) を読み取り専用にして、いかなる状況でも変更されないようにします (これにより、コピーオンライトを利用できると思います)。
現在、私は現在必要のない「機能」(参照カウント)のために、このタスクを達成するために別のプログラミング言語に移動することを余儀なくされているのではないかと心配していますが、それでも私に強制され、不必要な問題を引き起こしています。
python - locals() の呼び出しで参照が追加されるのはなぜですか?
以下の動作がわかりません。
locals()
新しい参照はどのように発生しますか?- gc.collect で削除されないのはなぜですか?
locals()
私はどこにも結果を割り当てませんでした。
バツ
出力は次のとおりです。