16 個の float の配列を格納するクラスがあります。float ポインターを使用してそれらを配列として格納するため、コンストラクター内で new 演算子を使用して配列を初期化する必要があります。私の質問は、クラスの一部として直接 16 個の float の配列を定義する方がより効率的/より良い方法ですか、それともポインターを介してクラスにデータを格納し続け、コンストラクターで new を呼び出す必要がありますか?
質問する
363 次
2 に答える
1
メモリ管理に関しては、普遍的な「より良い方法」はありません。そのため、特定の設計に適した方法を実行する必要があります。
常に正確に16個のfloatを割り当てる場合、クラス内に配列を埋め込むと、動的アロケータへの呼び出しの数が減ります。これは、オブジェクトが自動メモリに保存されている場合に役立ちますが、害を及ぼす可能性がある場合があります。たとえば、このクラスの大きな配列を自動ストレージに作成する場合、配列を埋め込むと、スタックがオーバーフローする可能性が高くなります。
最善のアプローチは、メモリ使用量とタイミングをプロファイリングし、これらのアレイを割り当てると大幅に遅くなるか、メモリの断片化に大きく寄与するかどうかを確認することです。現在のスキームで問題がなければ、置き換える理由はありません。
于 2012-09-24T01:45:49.080 に答える
1
正確に 16 個の float が必要であり、この数が変わる可能性が低いことがわかっている場合は、次のように使用する必要があります。
struct MyClass
{
....
float myData[16];
};
このシンプルなデザインを使用することは何の問題もありません。配列のサイズがケースごとに異なる場合は、次を使用することをお勧めします。
template <int _len_data>
struct MyClass
{
....
float myData[_len_data];
};
その後、次のような変数を定義できます。
MyClass<16> a1;
MyClass<64> a2;
于 2012-09-24T01:59:40.843 に答える