除非您指定自定义分配器,否则我对 STL 的对齐结构(例如,放置在 std::vector 中的 SIMD 向量)有一个模糊的记忆。
根据this document VS 2012/VC11 has partial support for c++ alignment。这是否意味着 VS STL 实现现在可以处理对齐的结构,而无需提供自定义分配器?
除非您指定自定义分配器,否则我对 STL 的对齐结构(例如,放置在 std::vector 中的 SIMD 向量)有一个模糊的记忆。
根据this document VS 2012/VC11 has partial support for c++ alignment。这是否意味着 VS STL 实现现在可以处理对齐的结构,而无需提供自定义分配器?
不,这意味着 VC++ 编译器支持一种指定类型所需对齐的方法(__declspec(align(N))
语法)。VC++ 一直支持,基本上都被列为“部分”,因为“我们有一些对齐相关的功能,看起来比说“不支持”要好。
除此之外,我不知道 C++11 对齐规范中有任何内容表明标准库容器中的 SIMD 向量可以保证工作。在这方面,C++11 对齐基本上只是编译器已经做的形式化(据我所知。如果你能证明我错了,我会很高兴)。
SIMD 向量是标准所说的“过度对齐类型”(参见“扩展对齐”部分)。这基本上意味着“我们什么都不保证,完全取决于编译器如何/是否处理这些类型。
换句话说,实现这部分 C++11 不一定会改变 SIMD 对象的处理方式。