Memory management RPGLE程序中的内存泄漏可以持续多久?

Memory management RPGLE程序中的内存泄漏可以持续多久?,memory-management,ibm-midrange,rpgle,rpg,Memory Management,Ibm Midrange,Rpgle,Rpg,我正在将一些RPGLE代码投入生产,它使用%alloc和dealloc分配内存。程序员应该能够确保不会导致内存泄漏,但我担心如果他们不这样做会发生什么 我的问题是:如果程序员搞砸了,出现内存泄漏,那么何时才能回收这些内存?是程序离开内存时还是作业完成时?我不熟悉那些内置函数,但通常在作业结束时(或者用户注销,如果是交互式的),所有内容都会被清除。如果您找不到答案,我可以向您指出另一个社区,您的答案可能是已知的。来自ILE RPG程序员参考指南: 当 激活组结束。将LR设置为on 不会释放任何堆存

我正在将一些RPGLE代码投入生产,它使用
%alloc
dealloc
分配内存。程序员应该能够确保不会导致内存泄漏,但我担心如果他们不这样做会发生什么


我的问题是:如果程序员搞砸了,出现内存泄漏,那么何时才能回收这些内存?是程序离开内存时还是作业完成时?

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

来自ILE RPG程序员参考指南:

当 激活组结束。将LR设置为on 不会释放任何堆存储 由模块分配,但任何 指向堆存储的指针将丢失


如果您的RPG程序位于其自己的激活组中,则程序结束时将释放内存。当然,当你的工作结束时,你的激活组也会结束。因此,结束作业将始终清理分配的所有内存。

听起来您是从C/C++背景中接近RPG的。我已经用RPG编程8年了,只有少数几次需要使用%alloc()BIF


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

实际上,您必须研究激活组的机制。内存泄漏可能会发生,但不会对机器造成任何损坏(我喜欢as400)。但您可能会损害iSeries工作中的其他程序(备注:如果您不是as400背景,您必须阅读as400工作机制)


如果您从自己管理工作中的激活组开始(当然是在程序中),您可以创建单独的内存区域。这需要一些开销(你必须命名这些组),但这样你就有了一个安全的环境,在那里你可以使用强大的功能。

现在正好看到这个博客,时间已经很晚了,但谁知道其他人可能会发现这仍然很有用

%alloc、dealloc使用作业的默认堆,因此作业结束时将清理该堆。
还有另一种类型的堆,您可以通过CEEAPI以编程方式使用它,它使用用户定义的堆——我认为您需要以编程方式管理或清理它,因为如果不是这样,我认为它可能会导致内存泄漏

还有其他(被接受的)答案提供了OP的问题,这些答案是几年前发布的。在发布答案时,请确保添加新的解决方案或更好的解释,尤其是在回答旧问题时。