给定以下 c 语言结构定义:
typedef struct PackTest {
long long a;
int b;
int c;
} PackTest;
Clang-Tidy 给出以下信息:
由于对齐不佳,访问 struct 'PackTest' 中的字段效率低下;当前对齐为 8 字节,但建议对齐为 16 字节
我知道为什么该结构与 8 个字节对齐,但我不知道该建议是否有效以及为什么。
给定以下 c 语言结构定义:
typedef struct PackTest {
long long a;
int b;
int c;
} PackTest;
Clang-Tidy 给出以下信息:
由于对齐不佳,访问 struct 'PackTest' 中的字段效率低下;当前对齐为 8 字节,但建议对齐为 16 字节
我知道为什么该结构与 8 个字节对齐,但我不知道该建议是否有效以及为什么。
一些特定的专用汇编指令可能有对齐要求(例如,x86非标量 SSE指令严格要求对齐到 16 字节边界)。当用于未与 16 字节边界对齐的数据(例如,x86 SSE2)时,其他指令可能具有较低的吞吐量。
这类指令通常用于根据处理器的硬件特性进行积极的优化。总体而言,您收到的消息仅在这些情况下有用(即,如果您实际上计划利用这些说明)。
也可以看看:
最后,我将引用上述评论中的Rich,因为他们提出了一个非常好的观点:
没有可笑地过度对齐的标准结构并没有什么“不整洁”。出于非常特殊的目的,您可能需要一个过度对齐的对象,但如果它标记了这个,那么它标记的大多数东西都是错误的,并鼓励您编写低效且无缘无故的非标准代码。
您可以添加-altera-struct-pack-align
Clang-Tidy 以禁用此警告
来源:https ://www.mail-archive.com/cfe-commits@lists.llvm.org/msg171275.html