2009-10-01 33 views
3

Je mets en production du code RPGLE qui utilise %alloc et dealloc pour allouer de la mémoire. Les programmeurs devraient être en mesure de s'assurer qu'il n'y a pas de fuite de mémoire qui en résulte, mais je m'inquiète de ce qui se passe s'ils ne le font pas.Combien de temps les fuites de mémoire peuvent-elles persister dans les programmes RPGLE?

Ma question est: si les programmeurs gâchent et fuites de mémoire alors quand cette mémoire sera récupérée? Est-ce quand le programme quitte la mémoire ou quand le travail se termine?

Répondre

8

Depuis le Guide de référence du programmeur RPG ILE:

Le stockage est implicitement libéré lorsque le groupe d'activation se termine . La définition de LR sur ne libérera pas de mémoire de tas allouée par le module, mais tous les pointeurs seront perdus.

Si votre programme RPG est dans son propre groupe d'activation, la mémoire sera libérée à la fin du programme. Bien sûr, lorsque votre travail se termine, votre groupe d'activation le fait aussi. Ainsi, la fin du travail nettoiera toujours la mémoire allouée.

0

Je ne suis pas familier avec ces fonctions intégrées, mais normalement tout est nettoyé lorsque le travail se termine (ou l'utilisateur se déconnecte si interactif). Si vous ne trouvez pas de réponse, je peux vous indiquer une autre communauté où votre réponse pourrait être connue.

2

On dirait que vous approchez du RPG à partir d'un arrière-plan C/C++. Je programme en RPG depuis environ 8 ans maintenant et seulement une poignée de fois a dû utiliser le BIF% alloc(). Cela dit, si vous utilisez un nouveau groupe d'activation, cela devrait fonctionner. Si vous utilisez un groupe d'activation nommé et que vous n'émettez pas la commande RCLACTGRP ou que vous utilisez le groupe d'activation par défaut, vous risquez de rencontrer des problèmes.

1

En effet, vous devez étudier le mécanisme des groupes d'activation. Des fuites de mémoire peuvent se produire, mais n'endommageront pas la machine (j'adore l'as400). Mais vous pouvez endommager les autres programmes de votre travail iSeries (remarque: si vous n'êtes pas issu d'un arrière-plan as400, vous devez en savoir plus sur le mécanisme du travail as400).

Si vous commencez par gérer vous-même les groupes d'activation dans votre travail (dans le programme qui est bien sûr), vous pouvez créer des zones de mémoire distinctes. Cela nécessite des frais généraux (vous devez nommer les groupes), mais vous avez alors un environnement sûr où vous pouvez créer des choses puissantes.