問題タブ [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.

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

ruby - ruby での変数参照

したがって、どうやらルビーはパスバイ参照言語のようです。

つまり、構築された配列とブロックの両方が、元のクラス インスタンス変数オブジェクトへの参照を処理しているように見えます。

ただし、これらの参照は、書き込みを試みるとすぐにコピーを作成するようです。

関数を介して変換する必要があるクラスインスタンス変数オブジェクトがいくつかあったので、参照渡しを利用してキーストロークを節約し、次のようにすることにしました。

しかし、このコピーオンライトが進行しているように見えるため、機能していないようです。

オフにする方法はありますか?コードを DRY と効率の両方を同時に維持しながら、どのように私を達成しますか?

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

java - Java - マルチスレッドのコピーオンライト

Java のマルチスレッド アプリケーションにソフトウェア強制コピー オン ライトを追加することは可能ですか? これは、同じオブジェクトへの参照を持つ複数のスレッドを意味しますが、1 つのスレッドがそのオブジェクトを変更しようとすると、指定されたオブジェクトがコピーされ、そのコピーを指すように参照が調整されます。

0 投票する
0 に答える
187 参照

objective-c - Objective-C のコピー オン ライト イフ リーク イディオム

オブジェクトのシーケンスを生成し、一度に 1 つずつアプリケーションに戻さなければならない状況があります (ブロックベースまたは高速列挙を考えてください)。

ただし、各オブジェクトの生成には比較的コストがかかるため、このコストを回避する方法を探しています。

シーケンスの 1 つのオブジェクトが与えられた場合、前者を単純に変更するだけで次のオブジェクトを効率的に生成できる場合があります。このため、1 つのオブジェクトのみを作成し、その同じオブジェクトをアプリケーションに渡し続け、シーケンスの各ステップで「舞台裏」で「安価な」変更のみを実行することによって「ごまかす」ことが魅力的です。 .

もちろん、問題は、アプリケーションが一部またはすべてのオブジェクトへの参照を別の場所に保存することを選択する可能性があることです (そして、それを許可する必要があります)。そうなると、一意のオブジェクトの真のシーケンスの「幻想」が崩壊します。

Objective-C が許可する場合、この問題を解決するための巧妙な方法は、アプリケーションが実際に別の場所に参照を格納するタイミングを検出し、それが発生した場合はいつでも、次の要素を生成する変更を適用する前に、オブジェクトをそれ自体のコピーで置き換えることです。シーケンスで。

このイディオムの正式名称はわかりませんが、「copy on write if leaked」、「copy on write if shared」、または単に「copy on write」と呼ぶことができます。

私の質問は次のとおりです。ARC が有効になっている Objective-C では、そのようなイディオムを実装できますか?

そして、Objective-C でこの種の問題を解決する正しい方法はありますか?

ARC を有効にすると、オブジェクトから参照カウントを抽出したり、それをインクリメントおよびデクリメントするメソッドをオーバーライドしたりできないことに気付きました。


編集:プロパティに適用できる属性があることに気付きましたがcopy、それを理解するのに苦労しています。それがどのように機能するか説明できる人はいますか?

http://clang.llvm.org/docs/AutomaticReferenceCounting.html#property-declarations

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

c - 変更されていない「コピーオンライト」メモリを解放する

コピーオンライトの背後にあるアイデアを理解しています。フォークすると、ヒープは CoW としてマークされ、プロセスがそれを変更しようとすると、コピーが作成されます。問題は、それにもかかわらず、子供のプロセスでそれを解放する必要があるかどうかです。親が動的な char *array を持っていると仮定すると、フォークします。子プロセスは const char を出力して終了します。子プロセスはヒープをまったく変更しませんでした。メモリリークは発生しますか?

編集: 子プロセスは配列をヒープに出力しますが、変更しません。Valgrind は、その配列を解放しないとリークがあると言っています。解放してもリーク/メモリエラーはありません。

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

javascript - JavaScript と大きな文字列、JavaScript はコピー オン ライトを使用していますか?

JavaScript がその変数をコピー オン ライト方式で管理しているかどうかを知りたい (できれば確認したい)。おそらく大きな文字列を扱うことになるかもしれないので、これは重要です。

ディープ コピーですかb、それともコピー オン ライトですか? b場合によっては別の値に設定するため (つまり、ほとんどの場合は copy a、他の場合には"on"orなどに設定するため) 、私のコードはコピー オン ライトから非常に恩恵を受け"off"ます。しかし、それは得られません。後で修正。)

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

c++ - ディープコピーによるセグメンテーション違反

オブジェクトのディープ コピー (コピー オン ライト用) を作成しようとしていますが、セグメンテーション エラーが発生します。

リンクリストでハッシュテーブルを使用しています。

私のクラス Hashtable の属性:

編集: この問題は修正されたようです。 ディープ コピーの何が問題になっていますか? 理解できない。私のコピー コンストラクターは優れていると思いますが、実行するとセグ フォールトが発生する理由がわかりません。