ほとんどが C++ で開発されたアプリケーションのメモリ フットプリントを削減しようとしています。私が調べていたのは、特に大きなデータ構造を参照で返すのではなく、値で返すことでした。私はそれについていくつかの確認が必要でした。たとえば、クラスsome_object
に次のようなメンバー関数があるとします。
const some_type& get_some_type(...) {
...;
return ...;
}
対
const some_type get_some_type(...) {
...;
return ...;
}
some_type
後者 (値による戻り) を呼び出すことによる割り当ては、アプリケーションの実行中の特定の時点でデータの 2 つのコピーをメモリに残し、前者 (参照による戻り) を呼び出すことはこれを回避するという私の理解は正しいですか?
メモリ フットプリントを削減するという全体的な目標の一部としての別の取り組みは、some_type
上記の参照によるリターン オプションの使用を排除する方法で の定義そのものを変更することでした。そのような場合、 since some_type
(実際には種類のコンテナ、たとえば type のデータのコンテナdata_type
) は、次のようにループ内で使用されます。
const some_type& = some_object->get_some_type(); // returns by ref. a large container
for(...) {
...;
data_type = some_type.at(...);
...;
}
上記の値による戻り値を使用するように制約されている場合は、コンテナーの要素を値で取得する新しい関数get_some_type_at
を導入して、次のように変更する必要があると思います (これを行うことの欠点はありますか?たとえば、パフォーマンスを意識していますか?):
for(...) {
...;
data_type = some_object->get_some_type_at(...); // returns by value a small object
...;
}
繰り返しますが、私はこれらの側面の確認を主に探しています。しかし、詳細と洞察が最も高く評価されます。お時間と関心をお寄せいただきありがとうございます。