我有一个结构数组,我希望将其存储为缓存对齐。我已阅读有关 __CACHELINE_ALIGNED__ 和 __cacheline_aligned 宏的内容。现在我想确认使用此属性定义的结构数组确实是缓存对齐的。
struct test{
int val1;
int val2;
int val3;
} __CACHELINE_ALIGNED__;
struct test tArr[2];
当然,如果我打印 tArr[0] 的大小,我会得到 12,所以我想出了以下测试:
printf("size of first %p, second %p\n", &tArr[0], &tArr[1]);
我收到的指针相距 12 个字节。这是否意味着结构未缓存对齐?我如何验证这些行是否真的缓存对齐。
谢谢。
最佳答案
标准 C 中没有名为 __CACHELINE_ALIGNED__
的东西,您是从哪里读到的?您只是在代码中定义了一个名为 __CACHELINE_ALIGNED__
的全局变量。
如果您希望您的结构是缓存行对齐的,您必须以编译器的标准方式指定对齐方式。例如假设 64 字节缓存行和 GCC 你会去:
struct test{
int val1;
int val2;
int val3;
} __attribute__ ((aligned (64)));
关于确认数组的缓存对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25227708/