В комментарии к каждому типу данных указано требование к его выравниванию в памяти процесса на примере архитектуры x86_64 (спасибо Coder007 за комментарий). Не путать с размером типа данных. Начнем с первого поля структуры с типом bool – поместим его по нулевому адресу на импровизированной линейке памяти где каждая клетка занимает один байт (рис. 1).
У следующего поля типа double значение выравнивания 8, т.е. его начало должно располагаться на кратном 8 адресе памяти (рис. 2).
Для int с выравниваем 4 ближайший кратный 4 адрес это 16 (рис. 3).
А для char по той же схеме поставим его по адресу 20 (рис. 4).
Но это не все. Если допустить, что размер структуры 21 байт, то следующая такая же структура Object будет располагаться следом - по адресу 21. Для ее поля типа bool допустимо находиться на 21-й позиции, однако тогда поле типа double будет уже 29-й, которая не кратна 8, т.е. нарушится правило выравнивания (рис. 5).
Для данного примера наиболее простой способ разместить в памяти все объекты и при этом учесть их выравнивание это добавить в конец структуры 3 байта (рис. 6).
Таким образом, размер структуры равен 24 байта. Если хотите уменьшить ее размер, то придется переставить поля.