問題タブ [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 に答える
652 参照

reference-counting - RefCounted!(T)を使用してDで参照カウントオブジェクトを作成する

std.typecons.RefCounted!(T)Dで参照カウントオブジェクトを作成するためにどのように使用しますか?

ソースを見て内部で何が行われるかを理解しようとしましたstd.array.Arrayが、ソースを読み取ることはできますが、ビット単位の構造体コピーなどが含まれる場合、「ペイロード」とは何か、またはすべてがどのように機能するかを理解できません。また、内部構造と外部構造でいくつかのものが重複している理由も同様です。

誰かがそれを使用して、たとえば単純なWin32をラップする方法の例またはリンクを提供できHANDLEますか?

ありがとう!

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

c++ - スレッドセーフ参照カウントに関する別の質問

スレッド セーフな参照カウンターを実装する方法については、たくさんの質問があります。そして、よく投票された答えは、「アトミックインクリメント/デクリメントを使用する」です。わかりました。これは、他のスレッドが途中で変更することなく、refCounter を読み書きするための良い方法です。しかし。

私のコードは次のとおりです。

そう。安全にrefCounterをデクリメントして読み取ります。しかし、私が refCounter をゼロと比較しているときに、他のスレッドが私の refCounter を INCREMENT するとどうなるでしょうか????

私が間違っている?

編集:(例)

私が間違っている?

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

python - C モジュールでメモリ リークが発生するのはなぜですか?

大きなファイルからリストを読み取っていますが、最終的には s として保存したいと考えていarray.arrayます。なぜなら

は非常に遅いので、strtok を実行する小さな C モジュールと、より高速なバージョンの atoi を作成しました。

したがって、私の python スクリプトは文字列で呼び出し、それをコンストラクターにints()渡し、結果の配列を.array.arraylist

ints()私の問題は、スクリプトがメモリをリークすることです。もちろん、関数ではなくマップでは発生しませんでした。

また、C モジュールを使用して独自のバージョンの Pythonint()を使用しても、メモリ リークは発生しません。

ご協力いただきありがとうございます!

編集: モジュールをvalgrindするために、次のスクリプトを使用しました:

を実行しましたが、とvalgrind --tool=memcheck --leak-check=full --show-reachable=yes python test.pyの間に valgrind からの出力がないため、前後にトンがあります。startstop

編集:リークしていることを確認するためのコード: import minhashTables

strtok によって変更されるため、文字列を再作成する必要があります。ちなみに、文字列を別のメモリ位置にコピーしても動作は変わりません。

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

c++11 - (Ab) shared_ptr を参照カウンターとして使用する

最近、私は狡猾な計画を考えました(tm :P)) プログラムの設定構造を更新する必要があります (15 秒ごとに言ってみましょう)。設定構造は複数の関数によって使用され、それらの関数はすべて複数のスレッドによって呼び出されます。そのため、古い設定構造体を安全に解放できるタイミングを知るために、参照カウンターが必要です。それで、これは正しい方法ですか?コードを注意深く読まなくても大丈夫だという回答はしないでください。共有ポインタに関しては、このような悪用を行うと間違いを犯しやすくなります (私を信じてください)。編集:重要な部分について言及するのを忘れていました。updateSettings() で初期化し、再度呼び出されるまでドロップしないため (その後、myFucntion がメモリ内の 2 つの設定のもう一方を使用するため)、この実装により ref カウンターが 0 にドロップされるのを防ぐことができると思います。

編集:コメントからのフィードバックを使用して、コードを更新しました:

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

iphone - 複数の Nib ロード後にリリースに失敗する

いくつかのボタンのテンプレートとして Nib を使用しています。それぞれが独自の独立した状態を持っています。しかし、ボタンを離そうとすると、dealloc でクラッシュしました。これがコードです...

ヘッダ:

Nib は非常にシンプルで、カスタム ビュー タイプの親ビューと子ビューが含まれているだけです。 ニブ

cSoundButton は、単に名前とブール値の状態 Mute または Not を追跡します。これがデロックです

クラッシュは、UIButton -> UIButtonContent dealloc の super dealloc への呼び出し内にあります。メモリ管理で2回の割り当て解除など、何か悪いことをしていると思いますが、どこを見つけることができません。

ペン先を複数回装填することは合法ですか?

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

php - 関数パラメーターに対する xdebug_debug_zval の奇妙な動作 -- 正しくない (?) refcount が表示される

コードは次のとおりです。

出力は次のとおりです。

したがって、質問:b: (refcount=2,..)出力の最初の 2 行にないのはなぜですか?

xdebug_debug_zval(1) 変数は実際には渡されず、(2) http://www.xdebug.org/docs/のドキュメントであるため、内部で変数を渡すために余分な参照を追加する場合には当てはまらないことに注意してください。 all_functionsは明示的に次のように述べています。

void xdebug_debug_zval( [string varname [, ...]] )

変数に関する情報を表示します

この関数は、型、値、および参照カウント情報を含む、1 つ以上の変数に関する構造化された情報を表示します。配列は、値を使用して再帰的に探索されます。この関数は、変数自体が実際に関数に渡されるために、PHP の debug_zval_dump() 関数が持つ問題を回避するために、PHP の debug_zval_dump() 関数とは異なる方法で実装されています。Xdebug のバージョンは、変数名を使用して内部シンボル テーブル内の変数を検索し、関数に変数を実際に渡す必要なく、すべてのプロパティに直接アクセスするため、より優れています。その結果、この関数が返す情報は、zval 情報を表示するための PHP 独自の関数よりもはるかに正確です。

XDebug パラメータを処理しなければならないものですか、それとも XDebug 自体の癖ですか?

PS Myphpinfo()は (PHP 5.3.3、XDebug 2.1.1、Ubuntu 10.10):

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

perl - Perl での再帰参照

私が読んでいる本によると、この場合$aは決して自由になることはありません.私の質問は、perl インタープリターがコンパイル時に修正しないのはなぜですか?自分自身を指していることが判明した場合は、refcount を増やさないでください。

なぜperlはそれをしないのですか?

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

delphi - 遅いメモリ解放 (参照カウントされた構造) - 私の回避策は良い方法ですか?

私のプログラムでは、カタログをロードできます:ICatalog

ここのカタログには、参照カウントされた構造体が多数含まれています (IItems、IElements、IRules などの Icollections)。

別のカタログに変更したい場合、新しいカタログをロードしますが、以前の ICatalog インスタンスの自動リリースには時間がかかり、アプリケーションが 2 秒以上フリーズします。

私の質問は:

古い (そしてもう使用されていない) ICatalog インスタンスのリリースを別のスレッドに延期したいと考えています。

まだテストしていませんが、新しいスレッドを作成するつもりです:

このようにして、リリースがスレッドで発生し、アプリケーションがフリーズしないことを期待しています。

それは安全ですか(そして良い習慣ですか)?
同様の方法ですでにリリースを実行している既存のコードの例はありますか?

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

python - Python C 拡張で refcounts を最も簡単にデバッグするにはどうすればよいですか?

そのため、いくつかの Python C 拡張機能をまとめました。それぞれの動作は確認されていますが、refcount デバッグによってこれを確認したいと思います。

INC/DEC 参照カウントを正しく挿入したことを確認するにはどうすればよいですか? この検証をブラック ボックスの観点から行いたいと考えています。つまり、すべての参照カウントが適切に行われた場合、関数の入力/出力/メモリはどのように見えるか?

私の最初のアプローチは、sys.getrefcount(obj) を使用し、すべての入力/出力オブジェクトの参照カウントをチェックして、問題がないことを確認することです。次に、使用されているメモリをチェックして、メモリ リークがないことを確認することもできます。

しかし、私はこれまで実際にこれを行ったことがないので、これを行う最も簡単で最も正しい方法は何ですか?

注: 私は Cython スタイルのライブラリを使用したくありません。基礎を学ぶために C の核心を自分でやりたいと思っています。

解決策:提案されたように、デバッグ対応のPythonインタープリターを構築しました。ややこしいかなと思ったけどそうでもなかった。このレシピに従って、それらの正確な行をObjects/object.c. その後、ダウンロードした Python ソース ディレクトリで行う必要があったのは、次のとおりです。

この新しいインタープリターへの C 拡張機能のビルドに関しては、その前に行う必要があったのinclude_dirsは、拡張機能のタグを にポイントsetup.py'/usr/local/python/include/python2.7'、新しいインタープリターでビルドおよびインストール コマンドを実行することだけでした。それが完了したら、c コードに行を追加するだけ_Py_CountReferences(stderr);で、refcount が stderr (コンソール) にダンプされます。何が refcount を変更するのか、コードの進行に応じてどのように増減するのかを確認するのは非常に良いことです。