C++ std::aligned_存储的奇怪行为
我正在使用msvcvisual studio 2012。Ta是以32对齐,还是仅以8对齐?我将您的示例转换为标准C++11,用struct alignas32 St{替换_declspecalign32struct St{ 然后我在我的系统clang++/libc++OS X上运行了它。结果如下:C++ std::aligned_存储的奇怪行为,c++,c++11,visual-studio-2012,alignment,C++,C++11,Visual Studio 2012,Alignment,我正在使用msvcvisual studio 2012。Ta是以32对齐,还是仅以8对齐?我将您的示例转换为标准C++11,用struct alignas32 St{替换_declspecalign32struct St{ 然后我在我的系统clang++/libc++OS X上运行了它。结果如下: 32 8 如果我将32更改为16或64,我将继续获得St和Ta的相同对齐方式。我怀疑这是您正在使用的实现中的一个错误。我将您的示例转换为标准C++11,将struct alignas32 St{替换
32
8
如果我将32更改为16或64,我将继续获得St和Ta的相同对齐方式。我怀疑这是您正在使用的实现中的一个错误。我将您的示例转换为标准C++11,将struct alignas32 St{替换为_declspecalign32struct St{ 然后我在我的系统clang++/libc++OS X上运行了它。结果如下:
32
8
如果我将32更改为16或64,则St和Ta的对齐方式仍然相同。我怀疑这是您正在使用的实现中的一个错误。VS2012的最大对齐方式为8,这意味着在所有上下文中支持的最大对齐方式为8。大于此值的对齐方式为“扩展对齐”和
是否支持任何扩展路线以及支持这些路线的上下文由实现定义
-[基本对齐]3.11/3
Microsoft的对齐说明符允许扩展对齐,但它们所使用的标准库的实现不支持扩展对齐。虽然这看起来并不不一致,但对我来说确实是一个QoI问题。对于VS2012,max\u align\t为8,这意味着在所有上下文中支持的最大对齐为8。align大于此值的路线为“延伸路线”,且
是否支持任何扩展路线以及支持这些路线的上下文由实现定义
-[基本对齐]3.11/3
Microsoft的对齐说明符允许扩展对齐,但它们所使用的标准库的实现不支持扩展对齐。虽然这似乎不是不一致的,但对我来说确实是一个QoI问题。您可以添加与您的编译器版本相对应的visual studio-20xx标记吗?可以吗请添加与您的编译器版本相对应的visual studio-20xx标记?似乎vs中不支持alignas。感谢您指出这一点。似乎vs中不支持alignas。感谢您指出这一点。
32
32