R>Элементы массива располагаются с тем же выравниваем, что и отдельные переменные.
видимо я что-то не понимаю

почему под виндой из msvs 2003 код
#include <iostream>
#pragma pack(8)
int main() {
char a_c[2];
int a_i[2];
struct s_c{char c1; char c2;} s_c_o;
struct s_i{int i1; int i2;} s_i_o;
struct s_c_i{char c1; int i2;} s_c_i_o;
std::cout << "a_c => size: " << sizeof (a_c) << "\tdiff: " << (int)&a_c[1] - (int)&a_c[0] << std::endl;
std::cout << "a_i => size: " << sizeof (a_i) << "\tdiff: " << (int)&a_i[1] - (int)&a_i[0] << std::endl;
std::cout << "s_c => size: " << sizeof (s_c) << "\tdiff: " << (int)&s_c_o.c2 - (int)&s_c_o.c1 << std::endl;
std::cout << "s_i => size: " << sizeof (s_i) << "\tdiff: " << (int)&s_i_o.i2 - (int)&s_i_o.i1 << std::endl;
std::cout << "s_c_i => size: " << sizeof (s_c_i) << "\tdiff: " << (int)&s_c_i_o.i2 - (int)&s_c_i_o.c1 << std::endl;
return 0;
}
дает на выходе:
a_c => size: 2 diff: 1
a_i => size: 8 diff: 4
s_c => size: 2 diff: 1
s_i => size: 8 diff: 4
s_c_i => size: 8 diff: 4
1. правильно я понимаю, чтоо на однотипные типы выравнивание не распостраняется?
2. почему в структуре s_c_i размер 8? ведь выравнивание стоит в 8, и вроде бы как размер должен быть 12?