5

我有两个结构。

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

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

t_struct_outer我在我的代码中malloc 。我想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 字节长。属性(对齐)强制数组的每个元素对齐到 128 字节边界。

于 2012-11-02T16:54:08.487 回答