如何动态对齐结构的变量?

时间:2018-12-27 10:36:58

标签: c caching memory-alignment

我有一个包含许多变量的结构,我需要在结构中间动态对齐一些变量。例如,我有以下结构,我想使用posix_memalign或其他方法将x5对齐到缓存行。有可能吗?

struct many_vars {
    uint32_t x1;
    uint32_t x2;

    uint64_t x3;
    uint64_t x4;

    // ... 

    uint64_t x5;
    uint64_t x6;

    // ... 

    uint64_t x7;
    uint64_t x8;

}

2 个答案:

答案 0 :(得分:0)

我是这样认为的。您应该能够做到这一点:

forEach

答案 1 :(得分:0)

编译器通常在结构字段之间插入填充,以实现最佳对齐。这包括高速缓存行对齐等。您在该字段中尝试失败的两个重要原因。

  • 您的对齐方式可能没有考虑编译器正在执行的对齐方式,因此您将与之抗争。为此,您首先必须禁用编译器完成的所有对齐优化。因此,您的代码和编译器不会发生冲突。
  • 编译器可能会比您做得更好。它是基于对对齐问题的更深入研究而设计的,可能您不会考虑可以更好地组织对齐的情况。当您无法考虑这么多情况时,它可以处理数百种选择,并选择最佳选择。在我看来,最好让编译器执行程序设计的这一阶段。万一您想测试自己的技巧并失去与编译器的战斗力,就无法提供建议。为了使它起作用(至少比编译器更好),您必须非常精通内存对齐。编译器作者就是这样。