Produce an inefficient struct in C that wastes at least 7778
Produce an inefficient struct in C that wastes (at least) 77.78% of the space required for the struct. For example, the struct typedef struct {uint16_t a; uint32_t b; uint16_t c;} S1; takes 12 bytes, but typedef struct {uint16_t a; uint16_t c; unit32_t b; > S2; only requires 8 bytes. Thus it is wasting (12 - 8) = 4 bytes, or 50%, of the space required by the struct. I\'ve provided a program on the next page that can be used to compute the inefficiency of struct packing. #include #include typedef struct {uint16_t a; uint32_t b; uint16_t c; > S1; typedef struct {uint16_t a; uint16_t c; uint32_t b;} S2; int main() {double size1 = sizeof (S1); double size2 = sizeof(S2); printf(\"size: %lu\ \", sizeof(S1)); printf(\"size: %1u\ \", sizeof(S2)); printf (\"size-inefficiency: %.2f\ \", 100 * (size1 - size2)/size2); return 0;}
Solution
A struct is padded according to the largest type’s alignment requirements . So the largest wastage for c language can happen for a char of 1 byte and a double of 8 bytes . Or if arrays are taken .
Taking regular data types char and double giving inefficiency greater than 77.78 %
typedef struct {
char8_t a ;
double64_t b ;
char8_t c ;
double64_t d ;
char8_t e ;
double64_t f ;
char8_t g ;
double64_t h ;
char8_t i ;
double64_t j ;
char8_t k ;
} S1 ;
typedef struct {
char8_t a ;
char8_t b ;
char8_t c ;
char8_t d ;
char8_t e ;
char8_t f ;
double64_t g ;
double64_t h ;
double64_t i ;
double64_t j ;
double64_t k ;
} S2 ;

