PROJEKT CCE
Projekt CCE ist ein privates Projekt, in dem ich viele theoretische Konzepte
praktisch anwenden kann. Der Fokus liegt darauf, einige Engine-Systeme
in C++ umzusetzen. Begonnen habe ich dieses Projekt im Januar 2023. Seitdem hat sich
das Projekt sehr stark weiterentwickelt.
Aktuelle Features umfassen unter anderem:
- Strings
- Memory Allocation
- Basic D3D11 Rendering
- Job System
- Logging
- Runtime Debugging Tools (ImGui)
- Input (Mouse & Keyboard, XInput)
STRINGS
Strings sind ein elementarer Bestandteil jeder Software. Besonders in Games spielen sie eine kritische Rolle. Ihre Immutability machen Strings zu einem performancekritischen Faktor bei klassischen Operationen. Inspiriert von Jason Gregorys Game Engine Architecture, habe ich eine eigene String-Klasse implementiert, die einige Operationen optimiert.
Nachfolgend ist die Performance unterschiedlicher Operationen aufgeführt.
Alle Tests wurden in Release Konfiguration über 1.000.000 Operationen gemittelt.
Operation | CCE::String | std::string |
---|---|---|
Create New | 137 ns | 199 ns |
Create Existing | 68 ns | 328 ns |
Copy | 136 ns | 58 ns |
Move | 129 ns | 23 ns |
Length | 26 ns | 23 ns |
Compare | 26 ns | 79 ns |
Append | 395 ns | 65 ns |
Destroy | 1898 ns | 304 ns |
Die Destruction der Strings ist aktuell noch sehr aufwändig, da hier stets eine
Defragmentierung durchgeführt wird.
Dieser Vorgang kann später über mehrere Frames verteilt durchgeführt werden und/oder
nicht bei jeder Destruction, sondern nur falls notwendig.
Gut zu erkennen ist auch der Overhead beim Appenden von Strings.
Hierbei wird stets das Daten-Array durchlaufen um die passenden Strings zu finden.
Ebenfalls auffällig ist die Pointer-Indirection, die ich in Zukunft noch optimieren möchte.
Diese Implementierung bietet in einigen Operationen eine Optimierung, ist jedoch nicht grundlegend "besser" als andere
Modelle. So oder so ist es jedoch eine spannende Herausforderung, die mir die Implementierung einiger grundlegender
Optimierungskonzepte wie ein cache-freundliches Data-Layout und Hashing nähergebracht hat.