My experimentation shows that the struct is aligned to a 2-byte boundary, as such there is an extra byte of padding at the end.
C padding is implementation specific, and many compilers even allow you to change the alignment settings. There is no specific alignment as set out by the C standard.
However, there are some optimizations on x86_64 for structs that influence this padding decision, for small (<=16 bytes) structs they are passed through registers, and the smallest register is 2 bytes.
As far as I can tell, most C compilers do align on 4 byte boundaries most of the time otherwise, for example this struct:
struct small {
int x, y;
char val;
}
is 10 bytes. While this one:
struct big {
int x, y, z, w;
char val;
}
is 20 bytes.
In both clang and gcc, structs are aligned to 2 byte boundaries when they are <= 16 bytes and aligned to 4 byte boundaries otherwise.