Я тестировал выравнивание классов и обнаружил странное поведение. Я протестировал его с настройкой компилятора VS2012 4
и 8
байт, но в каждом случае вывод такой же.Вопрос о выравнивании класса
class Alignemnt{
public:
Alignemnt():a(){}
int a;
};
class Alignemnt_1{
public:
int a;
char array[2];
};
class Alignemnt_2{
public:
int a;
char array[2];
int x;
};
std::cout << "Sizeof(Alignemnt) :" <<sizeof(Alignemnt) << std::endl;
std::cout << "Sizeof(Alignemnt_1) :" <<sizeof(Alignemnt_1) << std::endl;
std::cout << "Sizeof(Alignemnt_2) :" <<sizeof(Alignemnt_2) << std::endl;
Каждый выход время:
Sizeof(Alignemnt) : 4
Sizeof(Alignemnt_1) : 8
Sizeof(Alignemnt_2) : 12
Я думаю, размер Alignemnt_2 должен быть 16 байт.
Итак, каков ваш вопрос? Мне кажется, что компилятор работает отлично? –
Я думаю, размер Alignemnt_2 должен быть 16 байт. – CrazyC
int обычно будет выровняться по 4 байт. char [2] - всего 2 байтовый объект. Вы получаете размер в 12 байт, потому что первый int занимает 4 байта, второй объект занимает 2 байта, а третий - 4 байт. – Charlie