Pregunta

Me voy a poner en producción un cierto código que utiliza RPGLE %alloc y dealloc para asignar memoria. Los programadores deben ser capaces de asegurar que no están dando como resultado pérdidas de memoria, pero estoy preocupado por lo que sucede si no lo hacen.

Mi pregunta es: si los programadores desordenar y hay son pérdidas de memoria a continuación, cuando se recuperó esta memoria? Es que cuando el programa deja de memoria o cuando finalice la tarea?

¿Fue útil?

Solución

A partir de la Guía de referencia ILE RPG Programador:

  

El almacenamiento se liberó de forma implícita cuando el   grupo de activación termina. Configuración de LR   no liberará cualquier almacenamiento montón   asignado por el módulo, pero cualquier   Se perderán los punteros a un almacenamiento dinámico.

Si su programa RPG está en su propio grupo de activación, a continuación, la memoria se libera cuando finaliza el programa. Por supuesto, cuando termina su trabajo, también lo hace su grupo de activación. Así termina el trabajo siempre va a limpiar cualquier memoria asignada.

Otros consejos

Parece que se está acercando a un juego de rol de / C ++ fondo C. He sido la programación en RPG durante unos 8 años y sólo un puñado de veces que he tenido que usar el alloc% () BIF.

Dicho esto, si usted está usando un nuevo grupo de activación, que debe estar bien. Si está utilizando un grupo de activación con nombre y no se emite el comando RCLACTGRP o si está utilizando el grupo de activación por defecto que podría surgir problemas.

De hecho, usted tiene que estudiar el mecanismo de grupos de activación. Las pérdidas de memoria pueden ocurrir, pero no va a hacer ningún daño a la máquina (Me encanta el AS400). Pero se puede perjudicar a los otros programas dentro de su trabajo iSeries (nota: si usted no es de un fondo AS400, usted tiene que leer sobre el mecanismo de trabajo AS400).

Si usted comienza con la gestión de los activationgroups dentro de su trabajo usted mismo (en el programa que es por supuesto), se puede crear por separado, una especie de zona de memoria. Se requiere algo de sobrecarga (hay que nombrar los grupos) pero entonces usted tiene un ambiente seguro donde se puede PowerFULL cosas.

No estoy familiarizado con los construidos en funciones, pero normalmente todo lo que se limpia cuando termina el trabajo (o usuario cierra la sesión si interactiva). Si no puede encontrar una respuesta, puedo apuntar a otra comunidad fuera su respuesta puede ser conocida.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top