La sorprendente trampa de asignación de memoria en Go: Una historia de regresión del 30%
2025-04-21
Una refactorización aparentemente inofensiva en un proyecto Go provocó una regresión de rendimiento del 30%. El culpable fue el método `GetBytes` de la estructura `ImmutableValue`, que usaba un receptor de valor, causando una asignación de montón en cada llamada. Las asignaciones de montón son significativamente más costosas que las asignaciones de pila. La causa raíz fue que el análisis de escape del compilador Go era impreciso; no pudo reconocer que el receptor de valor no escaparía. Cambiar a un receptor de puntero solucionó el problema. Este caso destaca la importancia de comprender las decisiones de asignación de memoria del compilador Go y usar tipos de receptor apropiados para código Go de alto rendimiento.
Desarrollo