T我明确指定为x -aligned的类型sizeof(T)假设我现在有:T arr[y],其中arr是X -aligned(无论是通过被分配在堆栈上,或者在数据,或由X -aligned堆分配)
然后至少有一些arr[1],...,arr[y-1]不是x对齐的.
正确?(事实上,如果不随扩展对齐规范改变,它必须是正确的sizeof(T))
注1:这是不一样的问题是如何的阵列在C++对准相比包含一个类型?.这个问题询问阵列本身的对齐方式,而不是内部各个元素的对齐方式.
注2:这个问题:alignas会影响sizeof的值吗?基本上就是我要问的 - 但是对于扩展对齐.
注3:https://stackoverflow.com/a/4638295/7226419 这个问题是一个权威的答案(sizeof(T)包括满足对齐要求所需的任何填充,以使所有T的数组T正确对齐.
如果type T是x-aligned,则每个类型的对象T都是x-aligned,包括任何数组元素.特别是,这种方式x > sizeof(T)不可能成立.
几个现代编译器的快速测试证实:
#include <iostream>
struct alignas(16) overaligned {};
struct unaligned {};
template <class T> void sizes()
{
T m, marr[2];
std::cout << sizeof(m) << " " << sizeof(marr) << std::endl;
}
int main ()
{
sizes<unaligned>();
sizes<overaligned>();
}
Run Code Online (Sandbox Code Playgroud)
输出:
1 2
16 32
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
804 次 |
| 最近记录: |