【问题标题】:Cache aligning data structures缓存对齐数据结构
【发布时间】:2014-02-06 09:20:21
【问题描述】:

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

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

【问题讨论】:

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

标签: caching memory-management memory-alignment


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2021-12-02
      • 1970-01-01
      • 2013-06-03
      • 2019-07-14
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多