Boost C++ 库

……是世界上最受推崇、设计最精妙的 C++ 库项目之一。 Herb SutterAndrei Alexandrescu, C++ Coding Standards

词汇 - Boost C++ 函数库
PrevUpHomeNext

[basic.align]

对象类型具有对齐要求,这些要求限制了具有该类型的对象可能被分配的地址。 对齐 是一个由实现定义的整数值,表示在给定对象可以分配的连续地址之间的字节数。对象类型对该类型的每个对象都施加对齐要求;可以使用对齐说明符请求更严格的对齐。

基本对齐 由小于或等于实现支持的最大对齐的对齐表示,该最大对齐在所有上下文中都等于 alignof(std::max_align_t)。当类型用作完整对象的类型时,其所需的对齐可能与用作子对象的类型时不同。[示例:

  1. struct B { long double d; };
  2. struct D : virtual B { char c; };

D 是完整对象的类型时,它将具有 B 类型的子对象,因此它必须针对 long double 进行适当的对齐。如果 D 出现在另一个对象中,该对象也具有 B 作为虚基类,那么 B 子对象可能是不同子对象的一部分,从而降低了对 D 子对象的对齐要求。 —示例结束] alignof 运算符的结果反映了完整对象情况下的类型对齐要求。

扩展对齐 由大于 alignof(std::max_align_t) 的对齐表示。是否支持任何扩展对齐以及支持它们的上下文由实现定义。具有扩展对齐要求的类型是过度对齐类型。[注意: 每个过度对齐类型都是或包含一个类类型,扩展对齐适用于该类类型(可能通过非静态数据成员)。 —注意结束]

对齐以 std::size_t 类型的值表示。有效的对齐仅包括基本类型的 alignof 表达式返回的值,再加上一组额外的由实现定义的可能为空的值。每个对齐值都应为非负的二的整数次幂。

对齐具有从更严格的对齐顺序。更严格的对齐具有更大的对齐值。满足对齐要求的地址也满足任何较弱的有效对齐要求。

可以使用 alignof 表达式查询完整类型的对齐要求。此外,charsigned charunsigned char 类型应具有最弱的对齐要求。[注意: 这使得字符类型可以用作对齐内存区域的底层类型。 —注意结束]

比较对齐是有意义的,并提供明显的结果

  • 当两个对齐的数值相等时,它们相等。
  • 当两个对齐的数值不相等时,它们不同。
  • 当一个对齐大于另一个对齐时,它表示更严格的对齐。

[注意: 运行时指针对齐函数可用于在缓冲区内获取对齐的指针;库中的 aligned_storage 模板可用于获取对齐的存储。 —注意结束]

如果在特定上下文中请求的特定扩展对齐未被实现支持,则程序格式错误。此外,运行时动态存储分配的请求,如果无法满足所请求的对齐,则应被视为分配失败。


PrevUpHomeNext