Array Zugriffszeit
Speicheradresse eines Array-Elements aus Basisadresse, Index und Elementgröße: Adresse = Basis + Index · Elementgroesse. Konstante Zeit O(1).
Array Zugriffszeit berechnen
Speicheradresse eines Array-Elements aus Basisadresse, Index und Elementgröße: Adresse = Basis + Index · Elementgroesse. Konstante Zeit O(1).
- Adresse — Elementadresse
- Index — Index
- Basis — Basisadresse
Worum geht es?
Ein Array liegt als zusammenhängender Speicherblock im RAM. Da alle Elemente die gleiche Größe haben, lässt sich die Adresse eines beliebigen Elements durch eine einzige Multiplikation und Addition berechnen — unabhängig von der Array-Länge.
Das ist der Grund, warum der Zugriff auf arr[1000000] exakt gleich schnell ist wie auf arr[0]. Diese Eigenschaft heißt Random Access in konstanter Zeit O(1) und ist das wichtigste Argument für Arrays gegenüber verketteten Listen.
Die Formel
Adresse = Basis + Index · Elementgröße
Umstellungen:
Index = (Adresse − Basis) / Elementgröße
Basis = Adresse − Index · ElementgrößeDie Variablen
| Symbol | Bedeutung | Einheit | Erklärung |
|---|---|---|---|
| Basis | Basisadresse | Byte | Startadresse des Arrays im Speicher. |
| Index | Index | — | 0-basierter Index des Elements. |
| Elementgröße | Elementgröße | Byte | Größe eines Elements (z. B. 4 Byte). |
| Adresse | Elementadresse | Byte | Berechnete Adresse. |
Minimal-Beispiel
Ein int32-Array (4 Byte pro Element) liegt ab Adresse 0x1000. Wo liegt Element 7?
Adresse = 0x1000 + 7 · 4
= 0x1000 + 28
= 0x101CPraxis-Beispiele
Beispiel 1 — double-Array
Ein double[] (8 Byte) startet bei 0x4000. Element 50 liegt bei:
Adresse = 0x4000 + 50 · 8
= 0x4000 + 400
= 0x4190Beispiel 2 — Struct-Array
Eine Struct Point { float x; float y; } belegt 8 Byte. Bei points[12]:
Offset = 12 · 8 = 96 ByteBeispiel 3 — Index aus Adresse rückrechnen
Ein Profiler meldet Zugriff auf 0x2050 in einem int-Array (4 Byte) ab 0x2000:
Index = (0x2050 − 0x2000) / 4
= 80 / 4
= 20