2

16 個の float の配列を格納するクラスがあります。float ポインターを使用してそれらを配列として格納するため、コンストラクター内で new 演算子を使用して配列を初期化する必要があります。私の質問は、クラスの一部として直接 16 個の float の配列を定義する方がより効率的/より良い方法ですか、それともポインターを介してクラスにデータを格納し続け、コンストラクターで new を呼び出す必要がありますか?

4

2 に答える 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 に答える