std::aligned_storage的奇怪行为
strange behaviour of std::aligned_storage
_declspec(align(32)) struct St{
int foo;
};
typedef std::aligned_storage<sizeof(St), std::alignment_of<St>::value>::type Ta;
int main() {
std::cout << std::alignment_of<St>::value << 'n';
std::cout << std::alignment_of<Ta>::value << 'n';
return 0;
}
输出是:
32
8
我正在使用msvc(visual studio 2012)。Ta
是32,还是8?
对于VS2012 max_align_t
是8,这意味着在所有上下文中支持的最大对齐是8。大于此值的对齐方式为"扩展对齐"和
是否支持扩展对齐以及支持扩展对齐的上下文是由实现定义的。
本;[基本。对齐]3.11/3
Microsoft的对齐说明符允许扩展对齐,但是它们所使用的标准库的实现不支持扩展对齐。虽然这似乎不是不符合,但对我来说确实像是一个质量质量问题。
我将struct alignas(32) St{
替换为_declspec(align(32)) struct St{
,将您的示例翻译成标准c++ 11。
然后我在我的系统(clang++/libc++) OS x上运行它。我的结果是:
32
32
如果我将32更改为16或64,我将继续为St
和Ta
获得相同的对齐。我怀疑这是您正在使用的实现中的错误。
相关文章:
- 编译器如何实现__declspec(align(x)) / __attribute__(aligned(x)))?
- Azure Storage CPP & VCPKG
- C++应用程序缺少 winrt::Windows::Storage::Streams::D ataWriter
- thread_local "storage class specified"
- C++ 结构数组 - "This declaration has no storage class or type specifier"
- C++ 中的"this declaration has no storage class or type specifier"错误
- 如何修复派生类给出错误'declaration has no storage class or type specifier'?
- "declaration has no storage class or type specifier" C++
- 如何编译C 代码,包括Google Cloud Storage库
- 为什么对Aligned STD ::数组的初始自动矢量载荷是标量?(g /clang )
- C /WRL项目未知名称空间Windows :: Storage
- Marmalade Core Storage (s3eSecureStoragePut & s3eSecureStorageGet) not persisting
- 从 Windows::Storage::Streams::IBuffer 中获取字节数组
- 错误"this declaration has no storage class or type specifier"
- 使用字符串流时出现"Declaration has no storage class or type specifier"错误
- __attribute__((aligned(x)) 不适用于动态分配
- "storage-class information" __declspec() 是什么意思?
- ActiveMQ-CPP 在发送时抛出"Thread local storage limit"达到
- Including windows.storage.streams.h
- "Unrecognized storage class 111 for .text symbol `._XXXXXXXXX"是什么意思?