問題タブ [rule-of-three]
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++ - 2 つの非静的フィールド (動的配列) が互いに近いメモリを使用するようにする
動的サイズのストレージ クラスB1
とします。
(例) B2
B1~std::vector<char>
B2~std::vector<float>
C++11 では、 and と 関数をコーディングするB1
と(ルール オブ ファイブ)、それらをフィールドとして含むクラスは、デフォルトで自動的に正しくコピー/移動します。B2
move
copy
C
それは非常にうまく機能します。
問題
今日、プロファイルの結果を取得し、パフォーマンスの問題についていくつかのテストを行いました。
主な目的:私は、互いに近くにメモリを割り当てる同じインスタンスを作成する必要がb1
あります:-b2
C
できれば、プログラム全体のパフォーマンスが 10 ~ 20% 向上します。
私の貧弱な解決策
このようなカスタム アロケーターを使用できます (疑似コード):-
動作しますが、コードのデバッグ/保守がはるかに難しくなります。C
の移動とコピー は言うまでもありません。
旧バージョンでは all copy
/ move
mess は と にのみ表示されB1
ますB2
。現在、データ構造を直接
使用するすべてのクラスで混乱が発生しています。B1
B2
質問
役立つC++のテクニック/デザインパターン/イディオムは何ですか?
答えるために、実行可能なコードは必要ありません。擬似コードまたは概念だけで十分です。
MCVEを提供できなかったことをとても残念に思っています。
カスタムアロケータと配列管理は、最小化にとって非常に難しいものです。
c++ - ルール 5 - 代入演算子なしでコンパイル
配列であるメンバーを扱うときの移動演算子を理解するために、次の開発テストを作成しました。
代入または移動代入演算子を実装しないことで 5 のルールに違反しているのに、なぜこれが機能したりコンパイルしたりするのでしょうか?
現在、Visual Studio 2015 を使用しています。