minnime hat folgendes geschrieben: |
Dann hab ich nochwas. Es heißt dass der Compiler auf Integer und Cardinalwerte optimiert sei und nicht bspw. auf Byte. Wenn ich nun aber nur Werte bis 255 abspeichern will wären diese Typen ziemliche Platzverschwendung, sollte man dann trotzdem Integer benutzen?
|
Das lässt sich allgemein schwer beantworten, weil das ziemlich von Prozessor und Speicherausbau abhängig ist. Zugirffe auf Integers und Cardinals sind schneller als auf einzelne Bytes, weil sie der natürlichen Wortlänge des Prozessors entsprechen (32 Bits). Andererseits ist ein Byte-Array kleiner, womit es wahrscheinlicher ist, dass es in den Prozessor-Cache passt. Das macht die Sache natürlich viel schneller, weil der Prozessor Speicherzugriffe spart. Das gleiche gilt auch, wenn das Array so gross wird, dass es nicht mehr in den Arbeitsspeicher passt und die Maschine anfängt, zu swappen.
Ich würde daher vermuten, dass sich die Sache so verhält:
1. Sowohl Byte-Array auch Integer-Array passen in den Cache -> Integer ist schneller
2. Byte-Array passt in den Cache, Integer-Array aber nicht -> Byte ist schneller
3. Beide passen nicht in den Cache -> Integer ist schneller
4. Byte-Array passt noch ins RAM, Integer-Array aber nicht (natürlich zusammen mit so unwesentlichen Dingen wie dem Betriebssystem und dem Programm selbst
) -> Byte ist viel schneller
5. Beide passen nicht ins RAM -> beides ist furchtbar langsam
Das ist jetzt natürlich von mir so in den Raum spekuliert, nicht gemessen. Kann sein, dass der Vorteil der Grösse eines Byte-Arrays so viel ausmacht (das Integer-Array ist immerhin 4-mal grösser), dass das immer schneller ist.
Grundsätzlich muss man noch dazu sagen, dass es eigentlich nicht viel Sinn macht, einen Selection-Sort zu optimieren. Wenn man ein Programm optimieren will, schaut man sich zuerst die Algorithmen selbst an, und dann ist der logische Schluss, dass man Selection Sort überhaupt nicht verwendet. Ist das Array gross genug, ist die ineffizienteste Quicksort-Implementierung schneller als ein in Assembler handoptimiertes Selection-Sort.
Stefan