Cin*_*lia 4 c++ struct sizeof short
我有两个不同的数据结构,原则上应该具有相同的大小,我想知道他们为什么不这样做.
struct pix1 {
unsigned char r;
unsigned char g;
unsigned char b;
unsigned char a;
unsigned char y[2];
};
struct pix2 {
unsigned char r;
unsigned char g;
unsigned char b;
unsigned char a;
unsigned short y;
};
Run Code Online (Sandbox Code Playgroud)
然后,我将这些像素中的四个组合在一起,如下:
struct pix4 {
pix1 pixels[4]; // or pix2 pixels[4]
unsigned char mask;
};
Run Code Online (Sandbox Code Playgroud)
...但事实证明,根据sizeof(pix4),这种分组的大小会发生变化,具体取决于我是使用pix1还是pix2.个别sizeof(pix1)== sizeof(pix2),所以我很困惑为什么分组四像素会改变大小.我关心的是因为用2个无符号字符来编写带有短路的程序比较容易,但是每个像素耗费我0.25个字节.
我不确定这个架构是否具体,因为我没有在其他类型的机器上测试过.它可以对齐吗?这是我需要担心的事情,还是我可以继续执行简短的实施?
感谢您的帮助.
结构的大小是相同的,但它们的对齐要求是不同的.
结构的对齐是其所有成员的最大对齐.因此pix1,对齐1,因为它只有字符,但是pix2从短成员具有对齐2.的取向pix4然后获取从所述对准pixels部件,所以它的1在第一和2在第二种情况下.
现在,为了确保数组的所有成员都正确对齐,结构的大小将向上舍入到其对齐的下一个倍数.在这两种情况下,大小pixels都是24,但是有1个字节mask.在第一种情况下,对齐是1,因此25是它的倍数并且sizeof(pix4)是25,但是在第二种情况下,对齐是2,因此sizeof(pix4)必须向上舍入到下一个偶数,26.
在所有平台上都是一样的.