2009-10-01 28 views
3

我正在投入生产一些RPGLE代码,它使用%allocdealloc来分配内存。程序员应该能够确保没有导致内存泄漏,但是我担心如果不这样做会发生什么。RPGLE程序内存泄漏能持续多久?

我的问题是:如果程序员搞砸了内存泄漏那么这个内存何时会被回收?程序离开内存还是作业完成时?

回答

8

从ILE RPG程序员参考指南:当 激活组结束

存储被隐式释放。在 上设置LR不会释放由该模块分配的任何堆存储 ,但指向堆存储的任何指针都将丢失。

如果你的RPG程序在它自己的激活组中,那么程序结束时将释放内存。当然,当你的工作结束时,你的激活组也是如此。因此,结束工作总是会清理分配的内存。

0

我不熟悉那些内置函数,但通常是当作业结束时(或者如果用户注销,如果交互),所有内容都会被清除。如果你找不到答案,我可以指给你另一个社区,你的答案可能是已知的。

2

听起来你正在接触来自C/C++背景的RPG。我已经在RPG中编程了大约8年,并且只有少数几次必须使用%alloc()BIF。

这就是说,如果你使用的是一个新的激活组,你应该没问题。如果您使用的是已命名的激活组,并且未发出RCLACTGRP命令,或者您正在使用默认激活组,则可能会遇到问题。

1

事实上,你必须研究激活组的机制。内存泄漏可能发生,但不会对机器造成任何损害(我喜欢as400)。但是,您可能会损害iSeries作业中的其他程序(注意:如果您不是来自as400后台,则必须阅读有关as400作业机制的信息)。

如果您开始自行管理激活组(在课程中),您可以创建单独的存储区域。它需要一些开销(你必须命名组),但是你有一个安全的环境,你可以强大的东西。