Is your struct residence, your struct place?
Anyways, the size of declared members in struct residence is 14 bytes. But compilers usually allocate structs on integer boundary (means final sizeof (struct) % 4 == 0) or 4 byte boundary, for fast data access. Compiler will automatically pad the structure with required number of bytes (here 2)
It usually goes by sizeof (int)
If your declared structure size is 9 bytes then the final size will be 12 not 16.
Array as the only member is likely to have a same size as declared. Compiler may strip the structure part completely.
if yoy have
going by usual rule the size should be 4, but the size will
be 1, as there is only single char.
Alignment comes in when there are more than 1 datatype.
sizeof(ABC) = 2 not 4
}; declared size 3, actual size 4
char a1, a2, a3, a4, a5;
}; declared size 5, actual size 5
Don't have the exact answer. It's probably as a part of compiler optimization and less internal bookkeeping. Consecutive chars can be treated as arrays. for single char, why keep the overhead of struct. Compilers can do lots of optimization.
(My answer could be wrong, don't rely on it :) )