Интересно также увидеть ответ от людей, знакомых с внутренней кухней VC++, почему именно такое странное выравнивание и чем руководствовались разработчики компилятора.
Антон Жилин: Разработчики компилятора руководствовались тем, что процессоры intel ряд операций могут делать только тогда, когда данные выровнены в памяти.
Процессору удобнее (ну, инженерам было удобнее спроектировать такое), когда данные выровнены в памяти. Поэтому компилятор дополняет структуры ничего не значащими байтами (padding). Да, это перерасход оперативки, но в обмен на скорость. Память нынче дешевле скорости.
Для правильного вопроса надо знать половину ответа
Выравнивание тут, скорее всего, не при чём. 10 байт занимают данные и 4 байта - указатель на функцию reveal(). И полагаю, что вы не создаёте объекты динамически, иначе добавлялось бы ещё 8 байт - 4 для размера выделенного блока памяти и 4 для указателя на следующий выделенный блок.