缓存对齐数据结构

时间:2014-02-06 09:20:22

标签: caching memory-management memory-alignment

我想将应用程序中的数据结构与缓存行对齐。这是一个简单的场景:

typedef struct container {
  int a;
  int b;
} cont __attribute__((aligned(64));

int main() {
  cont *a;
  a = malloc( sizeof(cont) * 10);
  printf("%p", a);
  return 0;
}

在这种情况下,我认为数组的起始地址将是高速缓存对齐,即从64字节边界开始。但是打印的地址是0x9dd008,它没有与64字节边界对齐。我在这个实现中遗漏了什么吗?

2 个答案:

答案 0 :(得分:1)

您正在从堆中分配,并且返回的地址由malloc()确定。由于代码已经编译,编译器无法强制执行请求的地址对齐。

如果您尝试在堆栈上分配cont,您应该看到正确的对齐方式。

答案 1 :(得分:1)

您应该使用posix_memalign()来分配具有特定内存对齐的内存。在C11中,您还有机会使用aligned_alloc(),它将在其他平台(POSIX旁边)中提供与posix_memalign()相同的功能。