Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 |
cMap::cMap(unsigned int width, unsigned int heigth, bool wrap_edges /* = false */) : w{width}, h{heigth}, wBytes{(w + 7 )/ 8}, /* 1 char has 8 bits -> we store 8 cells in it */ toroid{wrap_edges} { totalBytes = wBytes * heigth; cells = new unsigned char[totalBytes]; memset(cells, 0, totalBytes); /* clear all cells on construction */ } |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 |
void cMap::on(unsigned int x, unsigned int y) { unsigned char* cell_ptr = cells + (y * wBytes) + (x / 8); *cell_ptr |= 0x80 >> (x & 0x07); } void cMap::off(unsigned int x, unsigned int y) { unsigned char* cell_ptr = cells + (y * wBytes) + (x / 8); *cell_ptr &= ~(0x80 >> (x & 0x07)); } |
IIch weiss, dass das Buch an sich veraltet ist, aber ich finde die Optimierungsmethoden da drin teilweise extrem clever.
Zitat
Jeder gängige Compiler heutzutage optimiert das besser als mit solcher Bitrotze
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Spiele Programmierer« (15.08.2015, 16:03)
Hello_Kitty!
unregistriert
Ganz allgemein: Benutzer einen std::vector anstelle eines dynamischen Speicherbereiches.
Nur um dem noch die Krone aufzusetzen: Nimm Java.Lieber den Code ausdrücklich gestalten als zu "optimieren", sodass es niemand versteht.
Ich hab neulich etwas in The Zen of Assembly reingelesen, das Buch ist mit 25 Jahren sogar noch älter. In Kapitel 4 wird der Intel 8088 beschrieben - der war damals bereits 10 Jahre alt und sein Flaschenhals der Speicherbus. Das erste was dieses 1990 erschienene Buch zur Codeoptimierung auf einem Chip von 1979 zu sagen hatte war also: Instruktionen so anordnen (out of order), dass deren Ausführung mit dem Prefetch des Speichercontrollers überlappt (Parallelität, Cache).Ein paar Stichworte die damals noch fast keine Rolle gespielt haben: Cache(Cache Density, Datenorientierung), Parallelisierung, Vektorisierung(SIMD), Branch Prediction, Out-of-order execution
Hello_Kitty!
unregistriert
Für Code(mikro)optimierung wären da die Agner Manuals und natürlich die Intel Manuals selbst. Aber die helfen natürlich nur, wenn du schon die optimale Datenstruktur gefunden hast.Gibt's denn ein vergleichbares Buch auf neustem Stand?
Werbeanzeige