размер компоненты массива тоже известен компилятору, разве нет?
Он-то известен, конечно. Но означает это лишь то, что доступ к элементам обычного массива и к элементам массива записей осуществляется одинаково эффективно. Тут нет разницы, из чего составлен массив.
Но есть принципиальная разница между массивом (неважно какого типа) и отдельной записью как таковой. В первом случае адрес поля может быть вычислен только уже на этапе выполнения, и никак иначе, во втором -- ещё на этапе компиляции.
Хотя есть и "ньюанс". Если Вы напишете что-нибудь типа
![$a[i]$ $a[i]$](https://dxdy-02.korotkov.co.uk/f/d/6/d/d6d0390c8972c686de739378984c0d2b82.png)
-- компилятор будет вынужден подсчитывать адрес оперативно. Ежели ж типа
![$a[17]$ $a[17]$](https://dxdy-01.korotkov.co.uk/f/0/2/7/0270fa4d8615b16b5e6f18ef9ea6dce082.png)
-- грамотный компилятор подставит в поле смещения константу.