У меня есть две разные структуры данных, которые в принципе должны иметь одинаковый размер, и мне интересно, почему это не так.
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;
};
Затем я группирую четыре таких пикселя вместе, как таковые:
struct pix4 {
pix1 pixels[4]; // or pix2 pixels[4]
unsigned char mask;
};
... но оказывается, что размер такой группировки меняется в соответствии с sizeof(pix4) в зависимости от того, использую ли я pix1 или pix2. Индивидуальный sizeof (pix1) == sizeof (pix2), поэтому я не понимаю, почему группировка квартетов пикселей меняет размер. Меня это волнует, потому что проще писать программы с короткими, чем с двумя беззнаковыми символами, но это стоит мне 0,25 байта на пиксель.
Я не уверен, специфична ли эта архитектура, так как я не тестировал ее на других типах машин. Может это выравнивание? Это то, о чем мне нужно беспокоиться, или я могу продолжить короткую реализацию?
Заранее благодарны за Вашу помощь.
y
, которые принимают и возвращаютuint16_t
, даже если внутреннее представление использует два отдельных байта. - person Matthieu M.   schedule 05.06.2012