Добрый вечер.
struct S
{
char a;
double b;
}
std::cout << sizeof(S) << std::endl;// Выдает 16
std::cout << sizeof(char) + sizeof(double)<< std::endl;// Выдает 9
std::cout << alignof(S) << std::endl;// Выдает 8
Объясните, пожалуйста, как получаются 16, 9 и 8?
Ну 9 легко получается, так как размеры char и double у меня 1 и 8 соответственно.
Насчет 16-и : дело, наверное в размере машинного слова, которое наверняка 4 байта, однако double и char по логике должны 3 машинных слова занимать - 12 байт, откуда 16 взялись? Впечатление такое, что 16 как наименьшее общее кратное 4-х(машинного слова) и 8-и.
С выравниванием мне вообще малопонятно, разве нельзя любую структуру выровнять по размеру машинного слова данной машины (т.е. скорее всего 4 байта)?