Entendendo os vazamentos de memória em go slice
Quando trabalha com fatias em go, é essencial entender o potencial para os vazamentos de memória, especialmente quando os ponteiros estão envolvidos. Ponteiros para inteiros ([]*int):
S: = []*int {new (int), new (int)} Esta fatia tem uma matriz de apoio com um comprimento de 2 e contém 2 ponteiros não-nil e alocados para alocar os integres externos. it:
s = s [: 1]
s := []*int{new(int), new(int)}
Slicing It simplesmente ocultará os elementos da nova fatia, mas eles permanecem na matriz de apoio. Ao contrário dos ponteiros, esses elementos fazem parte da própria matriz e não referem a memória externa. string de título string de autor } ... var bkslice = [] Livros {Book1, Book2} bkslice = bkslice [: 1]
Embora a fatia mantenha apenas o livro1, o autor e as seqüências de títulos do livro2 ainda estejam na memória como parte da matriz. Para evitar isso, atribua o valor zero ao livro2 antes de fatiar:
s = s[:1]
Isso remove a referência às strings no livro2, permitindo que elas sejam coletadas de lixo. Por exemplo, estruturas com campos que são ponteiros, fatias ou outras estruturas de dados complexas devem ser zeradas antes do remodelamento para cortar referências externas.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3