c – 即使使用填充,Sizeof结构也不清晰
发布时间:2020-12-16 09:52:17 所属栏目:百科 来源:网络整理
导读:在下面的结构中,我觉得大小应该是20,但它现在是24. class X { unsigned int a; unsigned int b; double c; unsigned int d;}; 为什么编译器不能安排16到20个字节的d? 解决方法 这使得c保持在X的数组中的8字节边界上对齐. X x[2];X[0]:0-3 unsigned int a4-7
在下面的结构中,我觉得大小应该是20,但它现在是24.
class X { unsigned int a; unsigned int b; double c; unsigned int d; }; 为什么编译器不能安排16到20个字节的d? 解决方法
这使得c保持在X的数组中的8字节边界上对齐.
X x[2]; X[0]: 0-3 unsigned int a 4-7 unsigned int b 8-15 double c 16-19 unsigned int d 20-23 [PAD] X[1]: 24-27 unsigned int a 28-31 unsigned int b 32-39 double c 40-43 unsigned int d 44-47 [PAD] 因此,您可以看到数组元素之间需要4个字节的填充.通过在对象的末尾添加4个字节来捕获它.如果第二个数组元素从位置20开始,那么你会发现x [1] .c不是8字节对齐的. 所以,最后,d确实如你所期望的那样从字节16开始,但是d的结尾不是对象的结束. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |