Cuando se programan aplicaciones de alto rendimiento como videojuegos, los desarrolladores buscan trucos para escribir código rápido que maximice los recursos limitados. La asignación de memoria es crítica para el código crítico de rendimiento que requiere memoria variable. Un "bump allocator" o asignador de pila optimiza esto tratando la asignación como una simple adición de enteros y la desasignación como una asignación de enteros aún más barata.
Alrededor de 2010, mientras trabajaba en Surreal Software en el proyecto cancelado "This is Vegas," el programación de animación enfrentó frecuentes asignaciones transitorias para mezcla de animaciones. Estas asignaciones existieron solo brevemente por cuadro y dependían de qué personajes estaban activos, determinados por el frustum de la cámara. El asignador apareció como un punto caliente en el perfilado.
La solución involucró implementar un asignador de pila donde la asignación es meramente una adición de enteros, y liberar memoria es una sola asignación de enteros. Al asignar un bloque fijo (por ejemplo, 1MB) y mantener una variable "tos" (top of stack), la gestión de memoria se volvió casi instantánea. El resultado fue una mejora significativa del rendimiento, con tiempos de asignación medibles en los perfiles.
Una limitación clave es que este asignador no llama automáticamente a los destructores; mientras que el placement new puede manejar constructores, la gestión de destructores es manual y propensa a errores. Además, los asignadores de pila sobresalen en entornos multihilo si la variable "tos" usa adición atómica, permitiendo que múltiples hilos asignen del mismo grupo, beneficioso en situaciones de CPU fork/join o algoritmos GPU. Las desasignaciones parciales también son posibles, recordando el estado "tos" al inicio de procesos recursivos y restableciéndolo al completarlos.
La técnica ofrece ganancias de velocidad sustanciales para necesidades de memoria transitoria durante un cuadro de juego.
Fuente: Hacker News · Resumido por HeadlinesBriefing