有没有办法强制数组的每个元素进行缓存对齐,而不必在每个数组元素的末尾或类型本身添加填充?
所以,如果我有:
struct foo {
struct bar bar;
};
struct foo fooarray[100] __attribute__((aligned(CACHE_LINE_SIZE)));
这将声明一个数组fooarray,其中数组本身是缓存对齐的,但是单个元素不是(因此fooarray[1]
不在缓存行上)。结构本身在数组之外使用,因此我不希望自动添加填充。与此同时,当我访问数组的元素时,我不想再进行任何额外的转换/解除引用...
答案 0 :(得分:3)
有没有办法强制数组的每个元素进行缓存对齐,而不必在每个数组元素的末尾或类型本身添加填充?
不,没有。数组的表示被定义为其元素的连续系列表示。您可以对齐数组的开头,从而对齐它的第一个元素,但如果数组有多个元素,并且元素大小不能被高速缓存行大小整除,那么某些元素必须无法进行高速缓存对齐。