размер компоненты массива тоже известен компилятору, разве нет?
Он-то известен, конечно. Но означает это лишь то, что доступ к элементам обычного массива и к элементам массива записей осуществляется одинаково эффективно. Тут нет разницы, из чего составлен массив.
Но есть принципиальная разница между массивом (неважно какого типа) и отдельной записью как таковой. В первом случае адрес поля может быть вычислен только уже на этапе выполнения, и никак иначе, во втором -- ещё на этапе компиляции.
Хотя есть и "ньюанс". Если Вы напишете что-нибудь типа
-- компилятор будет вынужден подсчитывать адрес оперативно. Ежели ж типа
-- грамотный компилятор подставит в поле смещения константу.