Учитывая, что int
- это 4 байта, а double
- это 8 байтов (что не гарантировано языком), sizeof (Values)
- это как минимум 8 байтов.
Чаще всего это будет ровно 8 байтов (в общем случае, sizeof (int)
или sizeof (double)
, в зависимости от того, что больше), но компиляторам разрешается добавлять безымянные отступы в структуры и объединения. Для структур, любое такое дополнение может быть между любыми двумя членами или после последнего; для союзов это может быть только в конце.
Цель такого заполнения - обеспечить лучшее выравнивание. Например, учитывая:
union u {
char c[5];
int i;
};
, если int
равен 4 байта и требует выравнивания 4 байтов, компилятор должен будет добавить заполнение, чтобы sizeof (union u)
по крайней мере 8 байтов.
В вашем конкретном случае, вероятно, нет причин добавлять какие-либо отступы, но вы не должны предполагать, что их нет. Если вам нужно узнать размер объединения, просто используйте sizeof
.