![]() |
Bug oder Denkfehler?
Hallo
Kann mir bitte jemand sagen ob ich hier einen Denkfehler mache oder ob es sich um einen Bug in Delphi 7.0 handelt; Ich habe foldenes Record: Type TDaqEvent = Record Data:Word; Time:LongWord; ms:Word; End; var Event:TDaqEvent; Wenn nun ich nun die Grösse des Records ermittle, dann liefert mir Delphi mit dem sizeOf-Opeator die Grösse = SizeOf(Event); // ==> Ergebnis 12 Bytes!!! Wenn ich die Summe aus Sizeof(Data) + Sizeof(Data) +Sizeof(Data) erhalte ich die Zahl 8. Meiner Meinung nach stimmen 8 Bytes; Hat jemand hierfür eine Begründung? Vielen Dank Geri |
Re: Bug oder Denkfehler?
Hallo Geri,
zunächst einmal herzlich willkommen im Delphi-PRAXIS Forum. Records werden nicht immer "komprimiert" gespeichert, sondern für schnellen Zugriff optimiert. Das kannst du verhindern, indem du das Wort "packed" davor setzt, also "packed record". |
Re: Bug oder Denkfehler?
Hi,
stell mal unter "Projektoptionen -> Compiler" die "Ausrichtung von Record-Feldern" auf 1 und erzeug das Projekt neu ;) Gruß Stephan :dance: :xmas: |
Re: Bug oder Denkfehler?
Hallo ihr Beiden
Vielen Dank für die freundliche Begrüssung und die kompetenten Antworten. Habe beide Lösungsansätze probiert und jetzt funktionieren meine Routinen tadellos. Super, vielen Dank und beste Grüsse Geri |
Re: Bug oder Denkfehler?
schreib es doch so hin:
Type TDaqEvent = Record Data:Word; ms:Word; Time:LongWord; End; Dann hast Du den Record auf natürlcihe Art und Weise alligned und die size ist 8 byte. Du hats somit selbe in der Hand wie Deine Records im Speicher liegen und musst es nicht dem Compiler überlassen. Manchmal macht es auch Sinn ein zusätzliches Feld (reserved, siehe WinAPI) einzuführen nur um einen record zu allignen. Gruss |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:27 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz