Pergunta

Estou colocando em produção um código RPGL que usa %alloc e dealloc para alocar memória. Os programadores devem ser capazes de garantir que não haja vazamentos de memória resultantes, mas estou preocupado com o que acontece se não o fizer.

Minha pergunta é: se os programadores bagunçam e ali são vazamentos de memória então quando essa memória será recuperada? É quando o programa sai da memória ou quando o trabalho terminar?

Foi útil?

Solução

Do guia de referência do programador de RPG ILE:

O armazenamento é implicitamente liberado quando o grupo de ativação termina. A configuração do LR não liberará nenhum armazenamento de heap alocado pelo módulo, mas quaisquer indicadores para armazenamento de pilhas serão perdidos.

Se o seu programa de RPG estiver em seu próprio grupo de ativação, a memória será libertada quando o programa terminar. Obviamente, quando seu trabalho termina, o seu grupo de ativação também. Portanto, terminar o trabalho sempre limpará qualquer memória alocada.

Outras dicas

Parece que você está se aproximando do RPG de um fundo C/C ++. Estou programando em RPG há cerca de 8 anos e apenas algumas vezes tiveram que usar o %aloc () bif.

Dito isto, se você estiver usando um novo grupo de ativação, você deve ficar bem. Se você estiver usando um grupo de ativação nomeado e não emitir o comando rclactgrp ou estiver usando o grupo de ativação padrão, poderá encontrar problemas.

De fato, você deve estudar o mecanismo de grupos de ativação. Os vazamentos de memória podem acontecer, mas não causam nenhum dano à máquina (eu amo o AS400). Mas você pode prejudicar os outros programas dentro do seu trabalho ISERIES (observar: se você não é de um plano de fundo AS400, precisa ler sobre o mecanismo de trabalho AS400).

Se você começar a gerenciar os grupos de ativação em seu trabalho (no programa que é claro), poderá criar uma espécie de área de memória separada. Requer algumas despesas gerais (você precisa nomear os grupos), mas você tem um ambiente seguro, onde pode coisas poderosas.

Não estou familiarizado com essas funções internas, mas normalmente Tudo é limpo quando o trabalho termina (ou o usuário desligar se interativo). Se você não conseguir encontrar uma resposta, posso apontar para outra comunidade que sua resposta pode ser conhecida.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top