Hallo Martin,
in einer Compilersprache wie C oder gar in Assembler nicht. Da ist die *Adresse* einer Variablen konstant - entweder über die gesamte Laufzeit des Programms (globale statische Variablen), oder zumindest während ihrer Lebensdauer (lokale oder dynamisch reservierte Variablen).
Ich meinte auch nicht die Adresse des Arrays sondern die des Feldes darin.
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. Wenn die Länge gerade 1 ist, braucht man die Multiplikation nicht. Aber auch eine Addition braucht so viel Schritte wie Bits. (Ok, mit Carry-Lookahead nur logarithmisch viele nicht parallele) Dann musst Du gucken, ob das Ergebnis irgendwo in einen Prozessorcache rumfährt. Ich weiß nicht mehr so genau, welche Varianten der Implementierung es da gab. Aber ein paar Bits dürfte man schon shiften können, bis man das geladen hat.
Wie lange braucht denn schon so ein LOAD aus dem Cache im Vergleich zu einem 1-Bit-Shift?
Grüße
Daniel