объясняется это тем, что оптимально делать структуры в размер кэш линии (16 байт (или dwordов) 10 лет назад было, как сейчас -- хз), чтобы было как можно меньше вытеснений из кеша и конкуренции..
На днях бенчмаркал одну простую функцию на Rust (перетащил её из С-шного кода Pillow).
Задача простая - на вход поступает int, в котором фактически лежит дробное число в fixed-point представлении и нужно получить целую часть этого "дробного" в виде байта (отрицательные числа вернуть как 0, а всё что больше 255 вернуть как 255). C-функция делала битовое смещение в право, прибавляла константу и результат использовала как индекс в глобальном константном массиве, что бы получить на выход байт.
Я сначала конечно не поверил что такое простое дело будет работать быстрее чем if ... elif ... else но оказалось что всё таки немного быстрее работало. Видимо прочитать из кеша один байт быстрее чем пройтись по паре условных jmp-ов.