假设我有一些T必须N字节对齐的类型.现在我声明一个类型的数组T:
T array[size];
Run Code Online (Sandbox Code Playgroud)
阵列是否具有与类型相同的对齐要求,T还是具有任何其他对齐要求?
CB *_*ley 17
是的,对齐要求必须相同.显然,数组T必须至少与单个对齐,T否则其第一个成员将不能正确对齐.数组不能比其元素类型更严格地对齐这一事实遵循标准的8.3.4节,该节表示数组是连续分配的元素子对象.考虑这个数组数组:
T a[2][size];
Run Code Online (Sandbox Code Playgroud)
无论价值如何size,两个阵列之间都不会有"额外"填充a[0],a[1]否则会违反连续分配的要求.
同样,我们知道(char*)&a[1] == (char*)&a[0] + sizeof(a[0])和sizeof(a[0]) == sizeof(T[size]) == size * sizeof(T).由于这适用于任何size必须可以放置T任何地址的数组,该数组适合于单个T对象(给定足够的地址空间).