No se puede liberar memoria una vez ocupada por bytes.

Recibo bytes de texto ASCII comprimido encompressedbytes de tipo [] byte. El problema que enfrento es que el siguiente procedimiento ocupa una gran cantidad de memoria que no se libera después de que la función llega a su fin y permanece ocupada durante todo el tiempo de ejecución del programa.

    b := bytes.NewReader(compressedbytes)
    r, err := zlib.NewReader(b)
    if err != nil {
        panic(err)
    }
    cleartext, err = ioutil.ReadAll(r)
    if err != nil {
        panic(err)
    }

Noté que el tipo en uso esbytes.Buffer y este tipo tiene elReset() yTruncate() funciona pero ninguna de ellas permite liberar la memoria que alguna vez estuvo ocupada.

losdocumentación deReset() establece lo siguiente:

Restablecer restablece el búfer para que esté vacío, pero conserva el almacenamiento subyacente para su uso en futuras escrituras. Restablecer es lo mismo que Truncar (0).

¿Cómo puedo desactivar el búfer y volver a liberar la memoria? Mi programa necesita aproximadamente 50 MB de memoria durante la ejecución que dura 2 h. Cuando importo cadenas comprimidas con zlib, el programa necesita 200 MB de memoria.

Gracias por tu ayuda.

=== Actualización

Incluso creé una función separada para la descompresión y llamo al recolector de basura manualmente conruntime.GC() después de que el programa regrese de esa función sin éxito.

// unpack decompresses zlib compressed bytes
func unpack(packedData []byte) []byte {
    b := bytes.NewReader(packedData)
    r, err := zlib.NewReader(b)
    if err != nil {
        panic(err)
    }
    cleartext, err := ioutil.ReadAll(r)
    if err != nil {
        panic(err)
    }
    r.Close()
    return cleartext
}

Respuestas a la pregunta(2)

Su respuesta a la pregunta