Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi sizeof record (https://www.delphipraxis.net/25100-sizeof-record.html)

Surrounder 1. Jul 2004 07:59


sizeof record
 
Hallo Forum hab eine kurze Frage, wenn ich folgendes mache:

Ttest1 = record
a : Byte;
end;

Ttest2 = record
b : Byte;
c : Ttest1
end;

var
test2 : Ttest2;

und dann sizeof( test2 ) mache dann bekomme ich immer 4 raus, steht da im record2 ein Zeiger auf den ersten oder woher kommt das? :wall:

Das Problem hört sich jetzt vielleicht blöd an, aber ich habe in wirklichkeit Records mit ca. 60 Variablen. Um die Übersicht zu behalten habe ich die in einzelne weitere Records aufgeteilt und dann in einem Hauptrecord zusammengefasst, nur stimmt eben jetzt die Bytegrösse nicht mehr. Die brauche ich aber um das ganze als Packet zu verschicken!?! :wiejetzt:

neolithos 1. Jul 2004 08:11

Re: sizeof record
 
Hier schlägt anscheinend das Alignment von Delphi zu.

Sag mal die größe wenn die die Records als packed deklarierst.

Surrounder 1. Jul 2004 08:22

Re: sizeof record
 
:cheers: ja dann stimmt es, dann kommt 2 raus.

hat das packed Nachteile? soviel ich weiss wird das dann doch hintereinander im Speicher abgelegt oder? müsste also langsamer sein oder ist das unmerklich :gruebel:

neolithos 1. Jul 2004 09:41

Re: sizeof record
 
Das packed ist langsamer!

Vielleicht merkt man es bei großen und langen Schleifen!

Christian Seehase 1. Jul 2004 12:30

Re: sizeof record
 
Moin Surrounder,

auch wenn es langsamer wird, so kommt man u.U. nicht darum herum die packed Variante zu nutzen, z.B., wenn mit diesem Record Daten aus Dateien ausgelesen/geschrieben werden sollen.

MrKnogge 1. Jul 2004 16:29

Re: sizeof record
 
:shock: Wasn Zufall, genau das gleiche Problem hatte ich (unbewusst)auch.
Ich hab mich die ganze Zeit gewundert, warum die Daten nicht richtig gespeichert werden....

Surrounder 1. Jul 2004 20:52

Re: sizeof record
 
@all

danke für die schnellen Antworten, ich habe die Records jetzt auch alle packed gemacht. Ich hätte sowieso wohl Probleme bekommen, denn ich kann mir den C und C++ Stiel einfach nicht abgewöhnen und habe einen Byte Zeiger auf den Record gemacht ( enthält 8 / 16 und 32 Bit Werte ) und schreibe dann mit der Anzahl von sizeof diese Bytes in meinen Byte orientierten USB Buffer. Wenn der Record aber nicht hintereinander im Speicher liegen dann kann ich das mit dem Zeiger auch vergessen, weil ich ja immer nur den Zeiger um eins Incrementiere.

Christian Seehase 1. Jul 2004 21:42

Re: sizeof record
 
Moin Surrounder,

Zitat:

Zitat von Surrounder
weil ich ja immer nur den Zeiger um eins Incrementiere

dann denk dran, dass Delphi typisierte Pointer immer um die Länge des Datentyps incrementiert/decrementiert, und somit nicht zwingend um 1.

Surrounder 2. Jul 2004 06:56

Re: sizeof record
 
also ich habe einen typisierten Pointer vom Typ PByte, den setzte ich auf den Anfang des Records, und gehe dann mit der Anzahl was sizeof zurückliefert durch. Dann ist doch egal welchen Typ die Variabeln im Record haben oder? :drunken:

Der Zeiger wird ja immer um 1 Byte Incrementiert. :dancer2:

Christian Seehase 2. Jul 2004 11:21

Re: sizeof record
 
Moin Surrounder,

klar, bei einem PByte Pointer klappt das natürlich.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:05 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