缓存对齐数组元素

时间:2017-05-24 17:27:50

标签: c arrays gcc

有没有办法强制数组的每个元素进行缓存对齐,而不必在每个数组元素的末尾或类型本身添加填充?

所以,如果我有:

struct foo {
    struct bar bar;
}; 

struct foo fooarray[100] __attribute__((aligned(CACHE_LINE_SIZE)));

这将声明一个数组fooarray,其中数组本身是缓存对齐的,但是单个元素不是(因此fooarray[1]不在缓存行上)。结构本身在数组之外使用,因此我不希望自动添加填充。与此同时,当我访问数组的元素时,我不想再进行任何额外的转换/解除引用...

1 个答案:

答案 0 :(得分:3)

  

有没有办法强制数组的每个元素进行缓存对齐,而不必在每个数组元素的末尾或类型本身添加填充?

不,没有。数组的表示被定义为其元素的连续系列表示。您可以对齐数组的开头,从而对齐它的第一个元素,但如果数组有多个元素,并且元素大小不能被高速缓存行大小整除,那么某些元素必须无法进行高速缓存对齐。

相关问题