Der Martin: Bitweiser Zugriff

Beitrag lesen

Hallo Daniel,

in einer Compilersprache wie C oder gar in Assembler nicht. Da ist die *Adresse* einer Variablen konstant

Du hast ja dann in einem Register Deinen Arrayindex stehen und willst nun den Wert haben. Also musst Du irgendwas der Art #Arrayadresse + index * #Datentyplänge rechnen, bzw der Prozessor muss das tun.

genau so ist es.

Wenn die Länge gerade 1 ist, braucht man die Multiplikation nicht.

Ist dir schon aufgefallen, dass die Größe der elementaren Datentypen in Byte auch immer gerade eine Zweierpotenz ist? Das nutzen die Compiler beim Indizieren von WORD- oder DWORD-Arrays natürlich aus. Daher ist die Indexberechnung richtig fix. Eine Multiplikation braucht's nur, wenn die Arrayelemente selbst komplexe Datentypen mit schräger Größe sind.

Aber auch eine Addition braucht so viel Schritte wie Bits.

Nope. Eine Addition erledigt ein Prozessor üblicherweise in einem einzigen Taktzyklus.

Wie lange braucht denn schon so ein LOAD aus dem Cache im Vergleich zu einem 1-Bit-Shift?

Keine Ahnung. Aber CPU-interne, registerbasierte Operationen sind immer viel schneller als wenn ein Speicherzugriff nötig ist. Selbst bei einem Cache Hit.

Ciao,
 Martin

--
Wenn du beim Kochen etwas heißes Wasser übrig hast, friere es ein.
Heißes Wasser kann man immer gebrauchen.