Dar free em tudo?

Dar free em tudo?

por Victor Sanches Portella -
Número de respostas: 5

Apesar de eu achar que não, muitos colegas de classe continuam insistindo que deveriamos dar free nas coisas que alocamos no final do programa, mas eu acho que, como o programa ja estaria no fim, e toda memoria ja seria liberada, não a necessidade de dar free.

Qual a opinião de vocês?

Em resposta à Victor Sanches Portella

Re: Dar free em tudo?

por William Gnann -

Depende.

O interessante de dar free nas coisas é você saber exatamente o que mexeu, o que é inútil etc. Além disso, é um ótimo costume caso você tenha um programa que seja interativo - já que as alocações de memória podem depender de interações com o usuário.

Em resposta à Victor Sanches Portella

Re: Dar free em tudo?

por Eduardo Hiramoto -

Meu EP estava dando problema porque eu estava dando free na hora errada. Pelo que conversei com o professor hoje, parece que não há problemas de não dar free no caso desse EP porque sabemos que acabando o programa vai ser liberado o espaço da memória, mas se o programa fosse maior seria interessante para liberar a memória.

Em resposta à Eduardo Hiramoto

Re: Dar free em tudo?

por José Coelho de Pina -

Só reafirmando o que vocês já escreveram acima . . .

Pelo que andei vendo, na maioria dos sistemas operacionais (Linux, MacOs, Windows),
no final do programa, não é necessário dar free nos objetos usados pois a área
ocupada por estes será devolvida ao sistema. Mas isto depende do sistema operacional (!)
e de como ele faz o gerenciamento de memória.

Assim, no final do programa, dar free em tudo que foi usado é uma boa prática de programação,
mas, no momento, é de fato desnecessário em SOs como Linux, MacOs e Windows. (Hmmm, não gosto de
deixar margem para o azar. . .)

Estamos falando sobre liberar a memória ao final do programa.
Durante a sua execução a liberação é certamente necessário, como vocês já comentaram.

P.S. Hmmm, na aula eu acho que não mostrei como liberar a área de uma matriz que foi alocada dinâmicamente... Eis o código

int **A;

[... alocação dinâmica e uso de A ...]

for (i = 0; i < nLinha; i++) 
  free(A[i]);

free(A);
Em resposta à José Coelho de Pina

Re: Dar free em tudo?

por Victor Sanches Portella -

Ha ha, então rpa evitar problemas, vou dar free em tudo no fim.  piscando

Obrigado pela ajuda.

Em resposta à Victor Sanches Portella

Re: Dar free em tudo?

por José Coelho de Pina -

Andei perguntando para os "universitários" (Alan, prof de S.O. e Conceitos de Linguagens
de Programação e ...) e eles me juraram que em todos os SOs modernos a alocação de
memória está associada ao "processo". Desta forma, quando o processo acaba toda a área alocada
pelo processo é devolvida para o sistema. Sendo assim, é supérfluo dar free nos objetos
alocados no final do programa.

Agora, os universitários também juraram que, de fato, devolver a área é uma boa prática,
pois esse código pode vir a ser parte de algo maior (e outras coisas) e nesse caso a devolução da área é importante.