Zitat von
negaH:
Nimm packed record und speichere diesen direkt.
Das hat die Vorteile
1.) weniger
RAM Verbrauch deiner riesigen Levels
2.) vieleinfachere Speicher/Laderoutinen.
Performancetechnisch unterscheidet sich das garnicht, denn selbst wenn du ausgerichtete Records benutzen würdest so würde DEIN obiger Record KEINERLEI Performanceeinbussen haben. Das liegt daran das beide Felder an 8 Bytes Grenze ausgerichtet sind, und nur das zweite Feld eben nur 2 Bytes groß ist. Somit ist der Zugriff auf beide Felder immer an 8 Bytes ausgerichtet. Ein ausgerichteter Record würde nur noch zusätzlich 6 Bytes am Ende des Records verwalten der in jedem falle Performance irrelevant ist.
Heutige CPU's haben KEIN problem nur 1,2,4,8 Bytes zu laden, das geht alles gleich schnell/langsam. Sie haben nur das Problem wenn diese Daten NICHT an eienr Speicheradresse stehen die nicht an 4 bzw. 8 Bytes Grenze ausgerichtet wurde. Dann entstehen zusätzliche Taktzyklen innerhalb der CPU, aber im Grunde irrelevant für uns, da das unverhältnismäßig kleiner ist als die vielen anderen Flaschenhälse der Hardware (Festplatten, Threads, Tasksswitsches, Interrupts etc pp.)
Gruß Hagen
Was passiert dann wenn aber 10 solcher Records in einem Array hintereinander stehen ? dann fängt das 2. record nicht an einer "geraden" Adresse an oder ?
Ist es beim kopieren von solchen Array's trotzdem nicht schneller, wenn 2mal 8 Bytes kopiert werden wie wenn einmal 8 und einmal 2 Bytes (oder 5m al 2 Bytes) kopiert werden müssen ?
Abgesehen davon würde ich auch packed records verwenden, da ich auch glaube, das der Performacne Gewinn im Vergleich zum schöneren und übersichtlichern / wartbaren Code einfach zu maginal ist.
Gruss
Hans