【发布时间】:2012-05-22 04:56:31
【问题描述】:
通过new char[sizeof(T)] 分配缓冲区,保证分配的内存与T 类型正确对齐,其中T 的所有成员都有其自然的、实现定义的对齐(也就是说,您没有使用alignas 关键字来修改它们的对齐方式)。
我在这里的一些答案中看到了这个保证,但我并不完全清楚标准是如何达到这个保证的。标准的5.3.4-10给出了基本要求:本质上new char[]必须与max_align_t对齐。
我缺少的是alignof(T) 将始终是最大值为max_align_t 的有效对齐方式。我的意思是,这似乎很明显,但结构的对齐结果是否必须最多为max_align_t?甚至第 3.11-3 点说可能支持扩展对齐,所以编译器可以自己决定一个类是过度对齐的类型吗?
【问题讨论】:
-
最后,一个好问题。我可以投票很多次吗? (点击点击点击)
-
@JohnDibling:你自己,不,但幸运的是我们有很多人:D
-
不是答案,但您不能安全地使用
new T并投射结果吗?哦,+1 教我一个新标签。我从未听说过语言律师。 -
规范中关于
sizeof的内容也必须是相关的:5.3.3-2 说“当应用于一个类时,结果是该类对象中的字节数,包括任何填充将该类型的对象放入数组中所需的" -
我还是不明白这个问题。
标签: c++ c++11 language-lawyer