Ausrichtung von Feldwerten

Im Kurstext "Implementierungskonzepte für DBS" werden folgende Sätze genannt:

1. die absolute Anfangsadresse eines Feldwertes muss durch die Anzahl der Bytes zur Darstellung des zugehörigen Typs ganzzahlig teilbar sein
2. die absolute Anfangsadresse des Datensatzes muss durch die größte Anzahl an Bytes teilbar sein, die eines seiner Feldwerte zur Darstellung benötigt

Dann werden Beispiele genannt:

Bool(1), Real(4), Zeichen(1)
(1+3)+(4+0)+(1+3)

Boll(1), Zeichen(1), Real(4)
(1+0)+(1+2)+(4+0)

String(24), String(9), Bool(1), Int(4), String(14), Int(4), Int(4), String(18)
(24+0)+(9+0)+(1+2)+(4+0)+(14+2)+(4+0)+(4+0)+(18+2)

Abgesehen, dass hier für Postleitzahlen nur 4 Stellen vorgesehen werden, kann mir das BITTE mal jemand anhand der Beispiele erklären! Ich kapier das nicht... danke!!
 
Die absoluten Anfangsadressen bei
Bool(1), Real(4), Zeichen(1)
(1+3)+(4+0)+(1+3)

sind:
0 für Bool (durch 1 teilbar..., Rest bis Real bleibt ungenutzt )
4 für Real (4 ist durch 4 teilbar, 5,6,7 gehört ebenfalls zu Real)
8 für Zeichen (8 ist durch 1 teilbar)
D.h. der Real Wert muss eine absolute Anfangsadresse haben, die durch 4 teilbar ist. Da Real direkt hinter Bool kommt, geht zwischen Bool und Real Platz verloren. Zieht man das Zeichen vor (was ja mit der Länge 1 in den Zwischenraum passt), so verliert man weniger Platz:

Die absoluten Anfangsadressen bei
Bool(1), Zeichen(1), Real(4)
(1+0)+(1+2)+(4+0)

sind:
0 für Bool (durch 1 teilbar...)
1 für Zeichen (durch 1 teilbar)
4 für Real (durch 4 teilbar)

Die größte Anzahl an Bytes , die ein Feldwert zur Darstellung benötigt, ist in beiden Fällen 4 (Real). Daher muss die Gesamtlänge ebenfalls durch 4 teilbar sein (12 Bytes im ersten bzw. 8 Bytes im zweiten Beispiel). Siehe dazu auch das angehängte Bild.


Zur Selbsttestaufgabe - im Kurstext (Kap. 2.3.4.) steht:

[...]D.h., Einschränkungen gibt es für Integer-, Real- und Long Real-Werte.[...]
Wenn man die Strings also außer Acht lässt, dann muss man sich lediglich noch um die zuvor zitierten Datentypen kümmern. Somit haben wir als längsten Feldwert Real mit einer Länge von 4 Bytes. Die Gesamtlänge muss demnach durch 4 teilbar sein und nicht etwa durch 24 (String). Die absolute Anfangsadresse von Strings kann beliebig sein.

Bei der Selbsttestaufgabe ergeben sich folgende Werte:
Die absoluten Anfangsadressen bei
String(24), String(9), Bool(1), Int(4), String(14), Int(4), Int(4), String(18)
(24+0)+(9+0)+(1+2)+(4+0)+(14+2)+(4+0)+(4+0)+(18+2)

sind:
0 für String (Anfangsadresse bei String irrelevant)
24 für String (Anfangsadresse bei String irrelevant)
33 für Bool (durch 1 teilbar)
36 für Int (durch 4 teilbar)
40 für String (Anfangsadresse bei String irrelevant)
56 für Int (durch 4 teilbar)
60 für Int (durch 4 teilbar)
64 für String (Anfangsadresse bei String irrelevant)
auffüllen bis 83 (Gesamtlänge 84 Bytes, durch 4 teilbar)
 

Anhänge

DANKE! Das hat mir echt weitergeholfen.
Bleibt zum Schluss nur noch eine Frage: Warum muss die Gesamtlänge mit 80 bzw. 84 ebenfalls durch 4 teilbar sein?
 
Top