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

StackOverflow https://stackoverflow.com/questions/1503197

Вопрос

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

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

Это было полезно?

Решение

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

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

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

Другие советы

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top