为什么 Clang-Tidy 建议使用更大的对齐方式?

yix*_*ang 5 c struct-member-alignment

给定以下 c 语言结构体定义:

typedef struct PackTest {
    long long a;
    int b;
    int c;
} PackTest;
Run Code Online (Sandbox Code Playgroud)

Clang-Tidy 给出以下消息:

由于对齐不良,访问结构“PackTest”中的字段效率低下;当前对齐为 8 个字节,但建议对齐为 16 个字节

我知道为什么结构对齐到 8 个字节,但我不知道该建议是否有效以及为什么。

Mar*_*lli 5

某些特定的专用汇编指令可能有对齐要求(例如,x86非标量 SSE指令严格要求对齐到 16 字节边界)。其他指令在用于未与 16 字节边界对齐的数据时可能具有较低的吞吐量(例如, x86 SSE2)。

这些类型的指令通常用于根据处理器的硬件特性执行积极的优化。总体而言,您获得的消息仅在这些情况下有用(即,如果您确实计划利用此类说明)。

也可以看看:


最后,我只是引述上面的评论,因为他们做一个很好的点:

标准结构不会过度对齐,这并没有什么“不整洁”的地方。出于非常特殊的目的,您可能需要一个过度对齐的对象,但是如果它标记了这个,那么它标记的大多数东西都是错误的,并鼓励您编写效率低下且毫无理由地非标准的代码。