Consider the following C declaration
struct {
Short S[5]
union {
floaty;
long z;
}u;
}t;
Assume that objects of the type short, float and long occupy 2 bytes, 4 bytes, 8 bytes, respectively. The memory requirement for variable t, ignoring alignment considerations, is
struct{
ShortS[5]
union{
floaty;
longz;
}u;
}t;
Assume that objects of the type short, float and
long occupy 2 bytes, 4 bytes, 8 bytes,
respectively. The memory requirement for variable t,
ignoring alignment considerations, is 18.
Short array s[5] will take 10 bytes as size of short is 2 bytes.
When we declare a union, memory allocated for the union is equal to memory needed for the largest member of it, and all members share this same memory space. Since u is a union, memory allocated to u will be max of float y(4 bytes) and long z(8 bytes). So, total size will be 18 bytes (10 + 8).