C++ std::aligned_存储的奇怪行为

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{替换

我正在使用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{替换为_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