确认数组的缓存对齐

标签 c arrays

我有一个结构数组,我希望将其存储为缓存对齐。我已阅读有关 __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/

相关文章:

c - C语言中 "array"的定义是什么?

C - 如果用户插入多个字符,则再次要求输入字符

c - 为什么我会看到以下编译时错误?

c - 旋转慢慢缩小图像

arrays - 无法在 RedHat 上使用 Ansible 2.10 版本从 JSON 文件获取数组元素

c - scanf 导致段错误 11

c - 在 C 中移动数组的最佳方法?

c - 尝试计算文件中的单词数

java - 如何在Java中从数组中随机选取四个元素而不重复?

javascript - 直接访问 javascript 数组是否更快?