Zitat von
Chemiker:
für die Deklaration des Records sollte man, wenn man in speichert mit packed arbeiten.
Sowas sollte man eh immer machen, sobald Daten übertragen oder gespeichert werden sollen,
also sobald Daten den Prozess/die Programminstanz, das Modul (EXE/
DLL) verlassen.
Ebenso sollte man nur statische Typen nehmen.
z.B. Integer und Char können sich ja schnell mal in der nächsten Delphi-/Compilerversion verändern
(ein gutes Beispiel sind die vielen
Unicode-Probleme mit alten Programmen/Codes, seit Delphi 2009)
Zitat von
Chemiker:
In Deinen Beispiel würde man 7Byte pro Datensatz sparen.
Aber dennoch würde ich eine "ordentliche" Speicherausrichtung nicht übergehen und hierbei manuell für die
Delphi-Quellcode:
TNote = 1..6;
TBuch = packed record 8 Byte-Align 4 Byte
Titel: String[51]; // 52 Byte = 6,5 > 6,5 = 13 >13
Autor: String[51]; // 52 Byte = 6,5 >13 = 13 >26
Erscheinungsjahr: TDate; // 8 Byte = 1 >14 = 2 >28
DatumEintrag: TDate; // 8 Byte = 1 >15 = 2 >30
ISBN: LongInt; // 4 Byte = 0,5 >15,5 = 1 >31
Kommentar: String[105{oder 97}]; // 106 Byte = 13,25 >28,75 = 26,5 >57,5
Bewertung: TNote; // 1 Byte = 0,125>28,875 = 0,25>57,75
Privat: Boolean; // 1 Byte = 0,125>29 = 0,25>58
end;
Für 'nen 32-Bit-Prozess also eine passende Ausrichtung.