5

私は2つの構造体を持っています。

t_struct_inner {
  int a;
  ... // a lot more members
}

t_struct_outer {
  t_struct_inner[1000] inners;
  t_struct_outer* next;
}

コードでmalloct_struct_outerします。t_struct_innerキャッシュを揃えたい。私の解決策は使用することです

 __attribute__((aligned(
       ((sizeof(t_struct_inner)/CACHE_LINE_SIZE)+1) * CACHE_LINE_SIZE
)))

しかし、ここでは使用できないため、明らかにこれを行うことはできませんsizeof。の値をハードコーディングしたくありませんaligned。上記を達成する方法はありますか?

4

1 に答える 1

1

これはトリックを行うべきではありませんか?

struct __attribute__((aligned(CACHE_LINE_SIZE))) t_struct_inner {
  int a;
  ... // more members.
};

編集: キャッシュ ラインの長さが 128 バイトで、t_struct_inner のメンバーの合計サイズが 259 バイトであるとします。128 バイトのアラインメントにより、次の配列:

t_struct_inner my_array[2];

(3*128)*2 バイトの長さです。属性 (aligned) は、配列のすべての要素を 128 バイト境界に整列させます。

于 2012-11-02T16:54:08.487 に答える