Как долго могут сохраняться утечки памяти в программах RPGLE? - PullRequest
3 голосов
/ 01 октября 2009

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

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

Ответы [ 4 ]

8 голосов
/ 01 октября 2009

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

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

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

2 голосов
/ 02 октября 2009

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

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

1 голос
/ 04 декабря 2009

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

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

0 голосов
/ 01 октября 2009

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

...