No Mais conceitos C (Google webcache, não no Internet Archive), li o seguinte:
Quando o aplicativo está saindo ou quando o buffer não é mais necessário, a memória devo ser liberado para os aplicativos usarem:
// Free dynamically allocated memory free(s_buffer);
No Aprendendo C para o SDK do Pebble (Arquivo da Internet), Eu leio:
Diferente de outras linguagens (como Python ou JavaScript), a linguagem C conta com os desenvolvedores para gerenciar qualquer memória que eles usem. Isso significa que qualquer memória alocada por um programa para armazenar dados devo ser liberado novamente pelo desenvolvedor para que outros programas possam fazer uso dele.
Estou acostumado a programar em não-incorporadocenários em que cada aplicativo possui seu próprio espaço de endereço e, após o término do processo, o SO recupera a memória alocada. No entanto, as duas declarações acima do SDK do Pebble sugerem que, se eu ligar malloc()
e o programa sai ou é morto antes de chamar free()
o relógio não poderá recuperar a memória. Também mostra exemplos de desinicialização de janelas após a saída do loop de eventos, etc.
Eu realmente esperava que, se precisassecalcular dinamicamente um tamanho de buffer uma vez na inicialização, não poderia me preocupar em limpá-lo antes da saída do processo. Obviamente, para coisas que têm uma vida útil mais curta que o processo, eu precisaria acompanhar e limpar as coisas para evitar vazamentos e causar falta de memória no meu aplicativo. Mas tentar fazer isso por tudo- e, mais ainda, de maneira a garantir que free()
ou *_deinit()
é chamado mesmo quando o programa termina de maneira impura - parece uma perda de tempo e impossível.
Como escrever um aplicativo Pebble Watch com segurança para queque quando o aplicativo é morto, toda a memória alocada é desalocada? Ou o sistema operacional da Pebble rastreia e limpa os recursos alocados por um aplicativo quando ele termina como sistemas operacionais modernos?
Respostas:
3 para resposta № 1A resposta parece ser:
- Sim, tudo será limpo depois de você se o aplicativo sair, seja por meio de uma interrupção ou por uma saída normal
- Garantir 0B relatado como ainda alocado na saída é uma boa prática, pois ajuda a evitar vazamentos de memória.
Como você viu, a documentação oficial équase inteiramente silencioso sobre o assunto, tão curta quanto uma declaração de um desenvolvedor do Pebble, não seremos capazes de obter uma resposta definitiva. Porém, temos algumas opções para chegar perto: a primeira é recorrer aos fóruns do Pebble:
Também podemos verificar a fonte mais confiável, o Reddit "s / r / pebbledevelopers, que afirmam:
- "todo o processo será eliminado na saída, portanto, tecnicamente, você não precisa se preocupar com isso. Limpar a si mesmo é um bom hábito, ".
- "Quando seu aplicativo é fechado, toda a memória que ele tinhaalocado é liberado. A rigor, isso significa que desalocar coisas na janela principal não é necessário. No entanto, garantir que 0 bytes seja alocado quando você sair do aplicativo ajuda a evitar problemas futuros.
- "toda a memória que você alocou é liberada pelo sistema quando o aplicativo é fechado, então não há realmente nenhum motivo para desligá-lo."
- "Na verdade, não importa se você ainda tem memória alocada quando o seu watchface fecha. O sistema libera toda a memória que você usa automaticamente "
Também podemos olhar para este conjunto de slides, em particular:
(Eu acredito que isso se aplica apenas a Aplite, também conhecido como Pebble 1.O)
o que sugere que não há muito espaço para aplicativos - se um ou mais aplicativos vazassem e não fossem totalmente limpos pelo sistema operacional, isso tornaria rapidamente impossível o lançamento de novos aplicativos.
Em conclusão: eu não me preocuparia muito com isso.