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

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

c++ - 2 つの非静的フィールド (動的配列) が互いに近いメモリを使用するようにする

動的サイズのストレージ クラスB1とします。 (例) B2
B1~std::vector<char> B2~std::vector<float>

C++11 では、 and と 関数をコーディングするB1と(ルール オブ ファイブ)、それらをフィールドとして含むクラスは、デフォルトで自動的に正しくコピー/移動します。B2movecopyC

それは非常にうまく機能します。

問題

今日、プロファイルの結果を取得し、パフォーマンスの問題についていくつかのテストを行いました。
主な目的:私は、互いに近くにメモリを割り当てる同じインスタンスを作成する必要がb1あります:-b2C

できれば、プログラム全体のパフォーマンスが 10 ~ 20% 向上します。

私の貧弱な解決策

このようなカスタム アロケーターを使用できます (疑似コード):-

動作しますが、コードのデバッグ/保守がはるかに難しくなります。Cの移動とコピー は言うまでもありません。

旧バージョンでは all copy/ movemess は と にのみ表示されB1ますB2。現在、データ構造を直接
使用するすべてのクラスで混乱が発生しています。B1B2

質問

役立つC++のテクニック/デザインパターン/イディオムは何ですか?
答えるために、実行可能なコードは必要ありません。擬似コードまたは概念だけで十分です。

MCVEを提供できなかったことをとても残念に思っています。
カスタムアロケータと配列管理は、最小化にとって非常に難しいものです。

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

c++ - ルール 5 - 代入演算子なしでコンパイル

配列であるメンバーを扱うときの移動演算子を理解するために、次の開発テストを作成しました。

代入または移動代入演算子を実装しないことで 5 のルールに違反しているのに、なぜこれが機能したりコンパイルしたりするのでしょうか?

現在、Visual Studio 2015 を使用しています。