Hallo,
Ich möchte Dir folgendes zu bedenken geben: Prozessoren sind besonders schnell, wenn sie auf Bytegrenzen ausgerichtete Speicherzugriffe machen können. Das heißt: Wenn Du die Werte in 16bit-Variablen abspeicherst, dann ist der Zugriff extrem schnell. Wenn Du dagegen die Werte in 9bit-Bitfeldern abspeicherst (wie hier im Thread vorgeschlagen), dann generiert der Compiler eine ganze Menge zusätzlichen Code, damit er die Daten richtig in die verschiedenen Bits reinquetschen kann. Dieser Code kann die Ausführung *dramatisch* verlangsamen.
Außer wenn der Speicher wirklich extrem knapp ist und man wirklich keine andere Wahl hat, würde ich *nie* dazu raten, sich nicht an Bytegrenzen zu orientieren. Der Performanceverlust ist einfach zu groß. In der Regel lohnt es sich, die 6 bit einfach wegzuschmeißen.
Ferner: Wenn Du 64 Zustände speichern musst (lese ich hier irgendwo heraus), wären das bei 16 bit ganze 128 Byte. Bei 9 bit a 64 Zustände wären es ganze 72 Byte. Differenz: 56 Bytes. Wenn Du an vielen Stellen im Code auf Deine Zustände zugreifen musst *und* Du auch noch alle Schleifen manuell ausrollen musst, weil Du ja nicht mehr einfach das über eine Schleife über den Index ansprechen kannst, dann wird der zusätzlich benötigte Programmcode vermutlich *locker* größer als die Differenz von 56 Bytes sein - d.h. den Vorteil in der Datenstruktur schmeißt Du durch einen riesigen Nachteil im Code (Performance + Größe) einfach weg.
Wenn Du tausende Zustände speichern musst, dann kann es sein, dass es vom Verhältnis Codegröße vs. Datenstrukturgröße sich wieder umkehrt - aber selbst dann bricht Dir die Performance ein.
Insofern: Außer, Dir geht der Speicher wirklich komplett aus, würde ich das an Deiner Stelle nicht machen.
Viele Grüße,
Christian
Mein "Weblog" [RSS]
Using XSLT to create JSON output (Saxon-B 9.0 for Java)
How to tell the difference between a science fan and a scientist.