Сложно догадаться, потому что может быть несколько более или менее веских причин, вероятно, все они связаны с попытками обеспечения обратной совместимости и во избежание обновления всех программ при обновлении.
Структуры
могут (ab) использоваться многими способами, например, люди могут иметь указатели внутри структуры, и вместо доступа к членам структуры через имя может бродить указатель:
struct {
int a;
int b;
int c;
} s;
и если кто-то обращается к структуре с помощью
struct s mys;
...
int *p = &mys.a; ++p; ++p; *p = 3;
сломается, если структура станет меньше
В качестве примера Windows (известная своей длинной историей головной боли обратной совместимости) часто имеет размер структуры в качестве первого члена в структуре, а затем приложения сначала читают это значение, чтобы угадать, с какой версией структуры они работают, Разумеется, это означало, что в зависимости от размера будет несколько структур с одинаковыми именами, соответствующих различным версиям (дрожь).
Конечно, недостаточно для обеспечения обратной совместимости, но это помогает.