Skip to main content
 首页 » 编程设计

c++之"minimum alignment"和 "preferred alignment"和有什么区别

2024年02月20日7zhengyun_ustc

最近我观察到,在 Clang 9.0 上 alignof__alignofunsigned long long 返回不同的值,并且在 https://reviews.llvm.org/D54814 处对此进行了讨论:

Starting in Clang 8.0 and GCC 8.0, alignof and __alignof return different values in same cases. Specifically alignof and _Alignof return the minimum alignment for a type, where as __alignof returns the preferred alignment.

我了解类型对齐,但​​从未遇到过“最小对齐”和“首选对齐”。

有人可以帮我理解这些到底是什么以及有什么区别吗?谢谢。

请您参考如下方法:

最小对齐是(在给定平台上)不会崩溃的对齐。在 x86-64 上它是一个字节。上PowerPCSparcRISC-V它可能是 4 或 8 个字节。

首选对齐方式是通常的对齐方式,例如由于处理器总线或 CPU 缓存。在 x86-64 上,unsigned long long 可能是 8 个字节。任何不太一致的访问都会造成性能损失。

详细信息是目标处理器和 ABI具体(例如,参见 this )。想想cross-compilers .

semantics C 或 C++ 的定义并不完美,也没有完全形式化。查看 C++ 草案 standard : 这是用英文写的,没有正式化。但另请参阅Frama-C (它有一个 C++ 实验性前端)和 CompCert 。了解 undefined behavior .