Как долго могут сохраняться утечки памяти в программах RPGLE?

Я запускаю код RPGLE, который использует %alloc и dealloc для выделения памяти. Программисты должны быть в состоянии обеспечить отсутствие утечек памяти, но я беспокоюсь о том, что произойдет, если они этого не сделают.

У меня такой вопрос: если программисты напортачат и будут есть утечки памяти, то когда эта память будет восстановлена? Это когда программа покидает память или когда работа завершается?


person Tarquila    schedule 01.10.2009    source источник


Ответы (5)


Из Справочного руководства программиста ILE RPG:

Хранилище неявно освобождается, когда заканчивается группа активации. Включение LR не освобождает память кучи, выделенную модулем, но все указатели на память кучи будут потеряны.

Если ваша RPG-программа находится в собственной группе активации, то память будет освобождена при завершении программы. Конечно, когда ваша работа заканчивается, ваша группа активации тоже. Таким образом, завершение задания всегда будет очищать всю выделенную память.

person Tracy Probst    schedule 01.10.2009

Звучит так, будто вы приближаетесь к RPG, имея опыт работы с C/C++. Я программирую в RPG уже около 8 лет, и лишь несколько раз приходилось использовать BIF %alloc().

При этом, если вы используете новую группу активации, все должно быть в порядке. Если вы используете именованную группу активации и не выполняете команду RCLACTGRP или используете группу активации по умолчанию, вы можете столкнуться с проблемами.

person James R. Perkins    schedule 02.10.2009

Действительно, вам предстоит изучить механизм групп активации. Утечки памяти могут произойти, но это не повредит машине (я люблю as400). Но вы можете нанести вред другим программам вашего задания iSeries (примечание: если вы не работаете с as400, вам следует прочитать о механизме задания as400).

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

person robertnl    schedule 04.12.2009

Я не знаком с этими встроенными функциями, но обычно все очищается, когда задание завершается (или пользователь выходит из системы, если он интерактивный). Если вы не можете найти ответ, я могу указать вам на другое сообщество, где ваш ответ может быть известен.

person Mike Wills    schedule 01.10.2009

Просто случайно увидел эти блоги сейчас, очень поздно, но кто знает, что другие могут все еще найти это полезным.

%alloc, Dealloc использует кучу задания по умолчанию, поэтому она будет очищена, когда задание завершится.
Существует еще один тип кучи, который можно использовать программно через CEE API, и он использует определяемые пользователем кучи. думаю, что вам нужно управлять или очищать программно, потому что, если нет, я думаю, что это может вызвать утечку памяти.

person Reynaldo Dandreb M. Medilla    schedule 19.12.2019
comment
Есть и другие (принятые) ответы, которые содержат вопрос ОП, и они были опубликованы несколько лет назад. При публикации ответа см. Как написать хороший ответ? убедитесь, что вы добавили новое решение , или существенно лучшее объяснение, особенно при ответе на старые вопросы. - person help-info.de; 19.12.2019