c - 为什么 Clang-Tidy 建议进行更大的对齐?
问题描述
给定以下 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,因为他们提出了一个非常好的观点:
没有可笑地过度对齐的标准结构并没有什么“不整洁”。出于非常特殊的目的,您可能需要一个过度对齐的对象,但如果它标记了这个,那么它标记的大多数东西都是错误的,并鼓励您编写低效且无缘无故的非标准代码。
推荐阅读
- python - 在文件夹中的多个文件上运行 Python 脚本
- javascript - 纪元时间到底是什么时候?在 PHP 中转换客户端时区的纪元?
- react-native - 如何使用原生模块创建 react-native android 模块?
- excel - Excel SUMIFS 检查列是否包含文本
- c# - C#如何通过Linq查询为每个数据行在现有数据表中添加一列?
- database - 每日交付系统的数据库模式?
- javascript - 在函数中渲染 JSX 元素
- sql - 如何替换 SQL 更新查询中的分隔列值?
- java - Fortify 认为强类型对象上存在日志伪造,除非我手动调用 .toString()
- batch-file - 星号批量扩展