Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Bug oder Denkfehler? (https://www.delphipraxis.net/34436-bug-oder-denkfehler.html)

Geri 23. Nov 2004 10:29


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

MrSpock 23. Nov 2004 10:33

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".

Steve 23. Nov 2004 10:54

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:

Geri 23. Nov 2004 11:32

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

whoareyou 24. Nov 2004 06:35

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 18:49 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz