gpt4 book ai didi

c++ - std::aligned_storage 的奇怪行为

转载 作者:行者123 更新时间:2023-11-30 01:23:04 34 4
gpt4 key购买 nike

_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。大于此值的对齐为“扩展对齐”,

It is implementation-defined whether any extended alignments are supported and the contexts in which they are supported.

[basic.align] 3.11/3

Microsoft 的对齐说明符允许扩展对齐,但是它们所使用的标准库的实现不支持它们。虽然这似乎并不不合规,但对我来说确实像是一个 QoI 问题。

关于c++ - std::aligned_storage 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15459316/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com