Для обычных массивов вы правы в том, что пространство выделяется во время выполнения, как только достигается определенная область действия массивов (запуск программы для глобальных переменных, запуск подпроцедуры для подпроцедур).
Однако вызаметит, что структура данных объявлена с based(pInfo)
.based
- это ключевое слово, которое НЕ будет выделять память.Вместо этого он будет предполагать, что вся память для структуры данных (включая элемент массива) уже выделена в месте, указанном указателем, переданным ключевому слову based
(в данном случае pInfo
).
Фактически, когда вы используете ключевое слово based
, вы просто сообщаете компилятору, как бы вы хотели использовать память по указанному указателю, но вы сами должны управлять этой памятью.
В итоге,если я правильно понимаю ваш вопрос, то ваше заявление о «знании размера во время компиляции» будет правильным.RPG не поддерживает двойственность указателя / массива или объекты, подобные массиву, как в некоторых языках, поэтому вам, по сути, нужно просто объявить RPG, что вы НИКОГДА не выйдете за пределы «начального значения».