0

最適化の観点から、次の観点が必要です。

私はいくつかのフィールドを持つ構造を持っています:

struct cmp {
   uint64_t count;
   uint8_t  var;
   uint64_t val_1;
   uint16_t val_2;
};

私が持っているフィールドのいくつかは、別の構造に移動できます:

struct Field {
   uint8_t  var;
   uint64_t val_1;
   uint16_t val_2;
};

コードの読みやすさから、これはより良いオプションです:

struct cmp {
    uint64_t count;
    Field    field;
};

次の方法で cmp 構造を使用します。

  1. パラメーター化された c'tor を使用してメンバーを初期化します。メンバーが増えると、引数の数が増え、見栄えが悪くなります。

  2. cmp 構造体を stl データ コンテナーの一部として使用します。

入れ子構造はコードの最適化に影響しますか? はいの場合、どのように?

それらを使用するより良いアプローチは何ですか?

4

3 に答える 3

3

鍵はここにあります:

コードの読みやすさから、これはより良いオプションです。

これは取るべき選択肢です。

後でプロファイリングし、必要に応じて後で変更を加えます。私はそれを非常に疑っていますが。現状では、オブジェクトは同じレイアウトを持つ必要があります。

于 2013-10-24T06:25:53.340 に答える
1

パフォーマンスに影響を与えることはありません。構造体はメモリ内で同じレイアウトを持ち、ポインターを使用していないため、コンパイラーはすべてのメンバーがどのオフセットにあるかを正確に認識します。性能的にはどちらも大差なし

于 2013-10-24T06:26:55.350 に答える
0

考慮すべきことの 1 つは、パディングとメモリ アラインメントです。64 ビット int の存在がこれにどのように影響するかについては 100% 確信が持てないため、sizeof(cmp) を介して構造体のサイズを指定すると、より多くの情報が得られます。cmp の配列がある場合、違いが生じます。

また、前に述べたように、私の謙虚な意見では、読みやすいオプションの方が優れています。

于 2013-10-24T07:27:48.557 に答える