問題タブ [copy-on-write]
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++ - Copy-On-Write と shared_ptr に関する混乱
Web を検索し、Boost に関するドキュメントを読みましたshared_ptr
。SO には、shared_ptr
Copy-On-Write (COW) が最悪でTR!
、文字列ライブラリから削除されたという応答があります。SOに関するほとんどのアドバイスshared_ptr
は、通常のポインターではなく使用するように言っています。
ドキュメントには、COW ポインターを作成するための使用についても記載std::unique()
されていますが、例は見つかりませんでした。
COW を実行するスマート ポインターを使用することについての話ですか、それともオブジェクトにクローン オブジェクトの新しいオブジェクトを使用させshared_ptr
てから、クローン オブジェクトを変更することについての話ですか?
例: レシピと材料
混乱は、oatmeal
レシピの「ミルク」をクリームに置き換えて、レシピに影響を与えない方法mashed_potatoes
です.
私のアルゴリズムは次のとおりです。
ここで、COW ポインターはどのように機能しますか?
注: Windows NT、Vista、および 7 で MS Visual Studio 2010 を使用しています。
python - ディープコピーはコピーオンライトを使用しますか?
可変オブジェクトでディープコピーを実行するときに、Pythonインタープリターがコピーオンライト戦略を適用するのではないかと思います。
また、変更不可能なオブジェクトに対してもディープコピーが実行されるかどうかを知りたいです(ただし、それは私には奇妙に思えます)
c - 子プロセスと親プロセスの変数のアドレスが同じである理由
これが私のコードです
プログラムの出力は次のようになります。
私の質問は、子と親の変数のアドレスが同じなのに値が異なるのはなぜですか?
c++ - return const auto object -- および Qt の暗黙の共有
したがって、このコードは意味がないことがわかっています。
とにかくコピーされたときに「const int」を返すのはどういう意味ですか?
しかし、Qt コンテナーのような暗黙的共有 (COW) を備えたクラスでは、やはり意味があるのでしょうか? 検討:
今私はできる:
Qt にはコンテナーの暗黙的な共有があるため、return lst
実際にはリストの内容をコピーせず、refcount を増やすだけで、const
それを変更できないことを確認するため、問題なく動作するはずです (get_list
何らかの理由で確実にしたい場合、または必要な場合)。const
メソッド自体である) 。ここで私の考えは正しいですか?
python - Python はリストのコピーにコピーオンライトを使用しますか?
既存のリストをコピーするとします。
【一部編集】
Python は、copyed_list または existing_list が変更されたときにコピー オン ライトを使用すると聞きました。これは本当ですか?
至る所でロックを必要とする複雑すぎるように思えます(マルチスレッドを考えてください)。
明確にするために: COW impl を探しているわけではありません。私はPythonの標準的な動作を理解しようとしています。
java - JavaでCopyOnWriteArrayListから基礎となる静的配列を取得するにはどうすればよいですか?
クラスの機能のリストを保持するクラスがあります。これらの機能は、読み取りと比較してめったに変更されません。読み取りは、ほとんどの場合、機能リストの反復です。このため、私はCopyOnWriteArrayList
.
私はこのような機能が欲しい:
認めますが、その理由は少し怠惰かもしれません。次のようなコードを書きたいと思います。
これではなく:
主な質問は - 私はここで怠惰ですか?私はこのパターンに多く従うつもりであり、コードの最初のチャンクは保守がはるかに簡単だと思います。明らかに、基になる配列を変更することは決してなく、これをドキュメントに記載します。
この状況を処理する適切な方法は何ですか?
c++ - 関数呼び出しパラメーターの式はどの程度の粒度でインターリーブされますか?
関数呼び出しパラメーターがどのようにインターリーブされるかについて正確に指定されていることを完全に理解したいと思います。私には多くの意味があるように思えます。次の例を見てください。
Sutterがcow_string
GotW で説明しているような Copy-On-Write 文字列コンテナーはどこにありますか: http://www.gotw.ca/gotw/045.htm
s1+="haha"
との評価がs2+="hahaha"
非常に細かい粒度にインターリーブされている場合、これは (コンパイラに応じて) cow_strings 内部参照カウントで競合状態が発生していることを意味しませんか?ミューテックスを使用して競合状態から保護しようとすると、シングルスレッドプログラムでセルフロックが発生することさえありませんでした (頭が痛くなります)。たとえば、S1 は内部コピーを作成し、mutex を取得して ref カウントコンテキスト スイッチを減らします。S2 も内部コピーを作成し、mutex と bam セルフ ロックを実行します。
(最初が true の場合のみ) 私のチームの他のメンバーが専門家でない場合、またはそのオブジェクトが COW であることを知らない場合、オブジェクトを COW にする安全な方法はありますか?
編集:
明確にするために、式があまりインターリーブされていないという私の図は、次の Herb Sutters の例によって揺さぶられました。
これを行う:
またはこれ:
ここでそれについて読んでください:http://flylib.com/books/en/3.259.1.55/1/
cow_string
2 番目の編集:参照カウンターを変更する関数がインライン化されると想定していたと思いますが、これはばかげた想定です。そのばかげた仮定がなければ、私の質問はあまり意味がありません。答えてくれてありがとう!
string - Go言語は文字列にコピーオンライトを使用しますか
Go言語はJavaのように文字列にコピーオンライトを使用しますか?つまり、文字列を値でメソッドに渡し、それを変更しない場合、これによりメモリが割り当てられ、文字列がコピーされます(これは時間効率が悪くなります)。または、単一のコピーを参照するだけです。
php - このように動作するコードが WRT 参照を返すのはなぜですか?
これは私の設定です:
display_startup_errors = on
display_errors = on
error_reporting = E_ALL | E_STRICT
上記のコード出力は、次の通知です。
厳格な基準: /path/to/file/file.php 行 'some line number'
$a= 11 $b= 10
a: (refcount=1, is_ref=0)=11の参照によって変数のみを割り当てる必要があります
上記のコードで通知が表示されるのはなぜですか? また、なぜ COW (copy on write) が行われるのでしょうか?
上記のコードは次を出力します。
$a= 11 $b= 11
a: (refcount=1, is_ref=1)=11
ここに厳格な基準通知が表示されないのはなぜですか? そして、ここで参照が機能します。
上記のコードは次を出力します。
$a= 11 $b= 10
a: (refcount=1, is_ref=0)=11
ここでCOWが行われるのはなぜですか?
xdebug_debug_zval の詳細については、こちらをご覧ください。
php - クラスベースのコーディングでは、関数の前に「&」を宣言することがあります
私はプロジェクト開発のためにクラスベースのコーディングに従っています.最近、関数名の前に「&」を付けることがあるのを見ました..
例として..
定義するのではなく
それは次のように定義されています
「&」に特別な意味はありますか?