【发布时间】:2017-05-17 11:27:16
【问题描述】:
- 我有一些类型
T,我明确指定为 x-aligned -
x >
sizeof(T) - x > 任何实现基本对齐
- (例如:x 与页面或缓存对齐)
假设我现在有:T arr[y],其中arr 与 x 对齐(通过在堆栈上或数据中分配,或通过 x-对齐的堆分配)
那么至少有一些arr[1],...,arr[y-1] 不是x-对齐的。
对吗? (事实上,如果sizeof(T) 不随扩展对齐规范而改变,它必须是正确的)
注意1:这不是与How is an array aligned in C++ compared to a type contained? 相同的问题。这个问题询问的是数组本身的对齐方式,而不是内部单个元素的对齐方式。
注意 2:这个问题:Does alignas affect the value of sizeof? 本质上是我要问的 - 但对于扩展对齐。
注意 3:https://stackoverflow.com/a/4638295/7226419 是对该问题的权威答案(sizeof(T) 包括满足对齐要求所需的任何填充,以使 T 的数组中的所有 T 正确对齐。
【问题讨论】:
-
也可能是 stackoverflow.com/questions/13284208/… 的副本?
-
@AurelBílý 见注释
-
可用这种东西标准没有由标准定义,让编译器适合给定平台。还有编译器设置可以改变这种行为,所以代码不应该假设事情是如何对齐的。
-
数组元素总是 sizeof T 分开。 Sizeof T 可能大于 T 的各分量之和。
-
不清楚你在追求什么。你的实际问题是什么?