C++ std::aligned_存储如何为任何对象公开正确对齐的存储?

C++ std::aligned_存储如何为任何对象公开正确对齐的存储?,c++,c++11,memory-management,alignment,C++,C++11,Memory Management,Alignment,std::aligned_storage结构提供了一个typetypedef,它至少符合以下条件: 提供成员typedef type,它是适合使用的PODType 作为大小最大为Len和的任何对象的未初始化存储 其对齐要求是Align的除数 Align的默认值是最严格的(最大的) 最大尺寸为Len的任何对象的对齐要求 特别是,使用默认值Align,可以对大小最多为Len的任何对象进行适当对齐 请注意,对于过度对齐的类型没有任何警告或例外(在任何情况下,我使用的平台gcc至少支持一些过度对齐的类型

std::aligned_storage
结构提供了一个
type
typedef,它至少符合以下条件:

提供成员typedef type,它是适合使用的PODType 作为大小最大为Len和的任何对象的未初始化存储 其对齐要求是Align的除数

Align的默认值是最严格的(最大的) 最大尺寸为Len的任何对象的对齐要求

特别是,使用默认值
Align
,可以对大小最多为Len的任何对象进行适当对齐

请注意,对于过度对齐的类型没有任何警告或例外(在任何情况下,我使用的平台gcc至少支持一些过度对齐的类型)

这样的实现实际上如何工作?为了满足“任何对象”的要求,它可能会:

  • 在平台上,
    alignof(T)Per

    是否支持任何扩展对齐由实现定义

    当他们在没有指针的大表之后指定这样的内容时,这是非常恼人的。我刚刚把这句话添加到参考资料中。

    所以脚注“2”不会出现在文本的任何地方,对吗?但奇怪的是,GCC通常支持至少128个扩展对齐,但这里不支持。但是,我想扩展对齐支持在任何实现中都是一致的,这是没有限制的。