Mehrdimensionale Arrays sind Datenstrukturen, die Daten in mehreren Dimensionen organisieren, ähnlich wie eine Tabelle oder Matrix. Während ein eindimensionales Array eine einfache Liste von Werten darstellt, organisiert ein mehrdimensionales Array diese Werte in mehreren Reihen und Spalten. Dies ist besonders nützlich in Anwendungen wie mathematischen Berechnungen oder grafischer Datenverarbeitung.
Speicherung in einem eindimensionalen Speicherbereich Obwohl mehrdimensionale Arrays eine strukturierte, mehrdimensionale Sicht auf Daten bieten, werden sie physisch in einem eindimensionalen Speicherbereich gespeichert. Die Daten werden linear abgelegt, aber durch spezielle Zugriffsregeln als mehrdimensional interpretiert. Die Zuordnung der Array-Elemente zu Speicheradressen muss konsistent erfolgen, sodass jedes Element an der gleichen Adresse liegt, wenn es über seine Indizes angesprochen wird.
Es gibt zwei Hauptmethoden zur Anordnung von mehrdimensionalen Arrays im Speicher: Row-major Ordering: Die Elemente einer gesamten Reihe werden nacheinander gespeichert, bevor zur nächsten Reihe übergegangen wird. Dies ist die Methode, die in den meisten Programmiersprachen wie C und C++ verwendet wird.
Column-major Ordering: Hier werden die Elemente einer gesamten Spalte nacheinander abgelegt. Diese Methode wird häufig in Programmiersprachen wie Fortran verwendet.
Beim Zugriff auf ein Element eines mehrdimensionalen Arrays in Hochsprachen, wie array[i][j]
, wird intern eine Formel verwendet, um die Speicheradresse des Elements zu berechnen. Diese Formel lautet:
Elementadresse = Basisadresse + (Spaltenindex + (Reihengröße × Reihenindex)) × Elementgröße
Hierbei gilt:
Beispiel in ARM-Assembler:
.data
array: .space 16, 0xbb @ 16 Elemente, die je 1 Byte groß sind und mit 0xbb
@ initialisiert wurden
.text
.global _start
_start:
ldr r0, =array @ basisadresse
mov r1, #1 @ reihenindex
mov r2, #4 @ reihengroesse
mov r3, #0 @ spaltenindex
mov r4, #1 @ elementgroesse in byte
@ mla Rd, Rm, Rs, Rn entspricht Rd = (Rm * Rs) + Rn
mla r1, r1, r2, r3
mul r1, r4
mov r2, #0xaa
strb r2, [r0, r1]
end:
b end
Mehrdimensionale Arrays sind besonders nützlich in der low-level Grafikprogrammierung. Beim direkten Zeichnen auf den Bildschirm wird der Bildschirmspeicher als mehrdimensionales Array betrachtet, wobei jede Position im Array einem Pixel auf dem Bildschirm entspricht. Auch in wissenschaftlichen Berechnungen, wie der Arbeit mit Matrizen, und in der Bildverarbeitung sind mehrdimensionale Arrays unverzichtbar.
zurück | Hauptmenü | weiter |
4.3 Komplexe Datentypen |
---|
4.3.1 Intro |
4.3.2 Structs (Strukturen) |
4.3.3 Arrays in Assembler |
4.3.4 Zugriffsberechnung bei einem eindimensionalen Array |
4.3.5 Lookup-Tables |
4.3.6 Mehrdimensionalen Arrays |