/ / A memória livre () na saída () é realmente necessária no Pebble? - c, relógio de calhau, pebble-sdk

A memória livre () está na saída () realmente necessária no Pebble? - c, pebble-watch, pebble-sdk

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 № 1

A 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:

Também podemos olhar para este conjunto de slides, em particular:

Tamanho da pilha de Aplite

(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.