Caching 缓存对齐数据结构

Caching 缓存对齐数据结构,caching,memory-management,memory-alignment,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字节边界开始。但是打印的地址是0x9

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

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字节边界对齐。我在这个实现中缺少什么吗?

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


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

您应该使用
posix\u memalign()
来分配具有特定内存对齐方式的内存。在C11中,您还可以使用
aligned_alloc()
,这将在其他平台(除posix外)中提供与
posix_memalign()
相同的功能

如果你还有任何问题,请告诉我。我很乐意回答。