2009-10-01 57 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作業機制的信息)。

如果您開始自行管理激活組(在課程中),您可以創建單獨的存儲區域。它需要一些開銷(你必須命名組),但是你有一個安全的環境,你可以強大的東西。