#Ton hat geschrieben:Werden Arrays immer zusammenhängend gespeichtert?
Deine Frage hat zwar überhaupt nichts mit Hardware & Elektronik zu tun, aber hier mal was die Pb Hilfe dazu sagt:
Pb Hilfe hat geschrieben:Arrays sind Strukturen zum Speichern von indizierten Elementen. Anders als bei einer verknüpften Liste oder bei einer Map werden die Elemente in einer zusammenhängenden Weise im Speicher angelegt.
Der Wert eines Array der Dimension n Array.Type(d_1_size, d_2_size, d_3_size, ..., d_n_size), auf den du mit Array(d_1_index, d_2_index, d_3_index, ..., d_n_index)
erhältst du nach folgendem Schema: *Pointer.Type = @Array(0) + ((d_1_size * d_2_size * d_3_size * ... * d_n_size) + (d_2_size * d_3_index * ... * d_n_index) + d_n_index) * SizeOf(Type) (Beachte: Dim Array.l(5, 6) würde d_1_size = 6, d_2_size = 7 ergeben!)
Also gesprochen: Startadresse des Array + Größe des Typs in Byte * (Summe über ($x = 1 to Dimesions) von ( d_[$x]_index * (Multiplikation über ($y = $x+1 to Dimensions) von (d_[$y]_size)))
Es gibt nach dem Kompilieren keine "Muliti-Dimensionalen" Arrays mehr in PB, der Compiler wandelt alles in 1. Single - Dimension Array um. Mulit - Dimension ist nur eine Komfort - Funktion. Das ist auch der Grund warum bei Multi Dimensionalen Arrays nur die letzte Dimension geändert werden kann, den Im Zugriffs - Code werden die Multiplikatoren (d_[n+1]_size * ... * d_[Dimensions]_size) vorberechnet und nicht bei jedem Zugriff neu, was eine Menge Zeit spart. Nur die letzte Dimension hat keinen Multiplikator da es bei einem n - Dimensionalen Array kein d_[n+1]_size mehr gibt, daher ist Sie variabel.