首页 > 解决方案 > 为什么 Clang-Tidy 建议进行更大的对齐?

问题描述

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

typedef struct PackTest {
    long long a;
    int b;
    int c;
} PackTest;

Clang-Tidy 给出以下信息:

由于对齐不佳,访问 struct 'PackTest' 中的字段效率低下;当前对齐为 8 字节,但建议对齐为 16 字节

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

标签: cstruct-member-alignment

解决方案


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

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

也可以看看:


最后,我将引用上述评论中的Rich,因为他们提出了一个非常好的观点:

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


推荐阅读