Динамический массив структур данных для хранения больших данных - PullRequest
0 голосов
/ 30 ноября 2018

Я читал статью о Динамически изменяемых массивах на ITJungle, и мне было интересно, не является ли это "упрощением, намного более сложным".

Итак, насколько я понимаю, если я определюСтатическая переменная, включая массивы, во время выполнения резервирует необходимое пространство на RUNTIME.Таким образом, при определении массива CHAR(10) DIM(10) все пространство будет зарезервировано при запуске программы.

Поэтому, как говорится в статье, если я хочу иметь динамически увеличивающийся массив, который изменяет свой размер, чтобы соответствовать данным, подобным List<String> в C #, я должен создать CHAR(10) DIM(10).Затем я должен перераспределить новое пространство только в случае необходимости?

Почему?Пространство уже зарезервировано.По какой причине кто-то должен основывать массив с (скажем) размером 100 байт на указателе, когда нужно всего 80 байт?

Я что-то пропустил?Является ли «init-value» для определения размера массива просто для того, чтобы успокоить компилятор, чтобы я не получил ошибку, что «компилятор не знает размер во время компиляции»?

1 Ответ

0 голосов
/ 30 ноября 2018

Для обычных массивов вы правы в том, что пространство выделяется во время выполнения, как только достигается определенная область действия массивов (запуск программы для глобальных переменных, запуск подпроцедуры для подпроцедур).

Однако вызаметит, что структура данных объявлена ​​с based(pInfo).based - это ключевое слово, которое НЕ будет выделять память.Вместо этого он будет предполагать, что вся память для структуры данных (включая элемент массива) уже выделена в месте, указанном указателем, переданным ключевому слову based (в данном случае pInfo).

Фактически, когда вы используете ключевое слово based, вы просто сообщаете компилятору, как бы вы хотели использовать память по указанному указателю, но вы сами должны управлять этой памятью.

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

...