Bei der Programmierung leistungsstarker Anwendungen wie Videospielen suchen Entwickler nach Tricks, um schnellen Code zu schreiben, der begrenzte Ressourcen maximiert. Die Speicherzuweisung ist kritisch für leistungskritischen Code, der variable Speicher benötigt. Ein "Bump Allocator" oder Stack-Allocator optimiert dies, indem er die Zuweisung als einfache Ganzzahladdition und die Freigabe als noch günstigere Ganzzahlzuweisung behandelt.
Um 2010, während ich bei Surreal Software am abgebrochenen Projekt "This is Vegas" arbeitete, stellte sich die Animationsprogrammierung vor häufige vorübergehende Zuweisungen für die Animationsmischung. Diese Zuweisungen existierten nur kurz pro Bild und hingen davon ab, welche Charaktere aktiv waren, bestimmt durch die Kamera-Frustum. Der Allocator erschien als Hot-Spot im Profiling.
Die Lösung bestand darin, einen Stack-Allocator zu implementieren, bei dem die Zuweisung nur eine Ganzzahladdition ist und das Freigeben von Speicher eine einzige Ganzzahlzuweisung ist. Durch die Zuweisung eines festen Blocks (z. B. 1 MB) und die Aufrechterhaltung einer "tos"-Variablen (Top of Stack) wurde die Speicherverwaltung fast instantaneous.
Das Ergebnis war eine signifikante Leistungsverbesserung, mit messbaren Zuweisungszeiten in den Profilern. Eine wichtige Einschränkung ist, dass dieser Allocator keine Destruktoren automatisch aufruft; während placement new Konstruktoren behandeln kann, ist die Destruktor-Verwaltung manuell und fehleranfällig. Darüber hinaus eignen sich Stack-Allocators hervorragend für Multithread-Umgebungen, wenn die "tos"-Variable atomare Addition verwendet, wodurch mehrere Threads aus demselben Pool zuteilen können, was in CPU-Fork/Join-Situationen oder GPU-Algorithmen vorteilhaft ist.
Teilweise Freigaben sind ebenfalls möglich, indem der "tos"-Status am Anfang rekursiver Prozesse gespeichert und am Ende zurückgesetzt wird. Die Technik bietet erhebliche Geschwindigkeitsgewinne für temporäre Speicherverwendungen während eines Spielscreens.
Quelle: Hacker News · Zusammengefasst von HeadlinesBriefing