Situaciones comunes y métodos para evitar el escape de la memoria
1. Si se devuelve un puntero a una variable local en un método, se hace referencia a él externamente y su ciclo de vida es más largo que la pila, entonces se desbordará.
2. Envíe un puntero al canal o un valor con un puntero, porque es imposible saber qué rutina recibirá los datos en el canal en el momento de la compilación y el compilador no puede saber cuándo liberarlos. .
3. Almacenar punteros o valores con punteros en el sector. Por ejemplo, []*string hará que se escape el contenido del segmento y su valor de referencia siempre estará en el montón.
4. Debido a que la adición del segmento hace que se exceda la capacidad, el segmento reasigna la dirección y el almacenamiento detrás del segmento se expande en función de los datos del tiempo de ejecución, que se asignarán en el montón.
5. Llame a un método en el tipo de interfaz. Este método está programado dinámicamente y solo se conoce en tiempo de ejecución.
La llamada al método de tipo de interfaz en 1 y Go es dinámica, por lo que no se puede determinar durante la etapa de compilación. La conversión de todas las estructuras de tipo en interfaces implica el escape de la memoria, por lo que las funciones a las que se accede con frecuencia deben llamar a las interfaces con la mayor frecuencia posible.
2. No utilice ciegamente punteros variables como parámetros. Aunque se reduce la copia, el escape variable es más caro.
3. Establezca la longitud del segmento con anticipación para evitar exceder y reasignar la capacidad con frecuencia.