Seite 1 von 1
Arrayspeicherweise im RAM
Verfasst: 08.04.2013 20:58
von #Ton
Hallo,
Werden Arrays
immer zusammenhängend gespeichtert?
Code: Alles auswählen
EnableExplicit
Global Dim c.l(4)
c(0) = 10
c(1) = 20
c(2) = 30
c(3) = 40
Debug PeekL(@c())
Debug PeekL(@c()+4)
Debug PeekL(@c()+8)
Debug PeekL(@c()+12)
Also kann man immer so auf die Elemente zugreifen, egal wie groß das Array ist?
__________________________________________________
Thread verschoben
Hardware & Elektronik>Allgemein
08.04.2013
RSBasic
Re: Arrayspeicherweise im RAM
Verfasst: 08.04.2013 21:26
von Josh
#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.
Re: Arrayspeicherweise im RAM
Verfasst: 08.04.2013 21:47
von cxAlex
Jup.
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.
Gruß, Alex
Re: Arrayspeicherweise im RAM
Verfasst: 08.04.2013 22:22
von #Ton
Vielen Dank
