![]() |
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: |
Re: sizeof record
Hier schlägt anscheinend das Alignment von Delphi zu.
Sag mal die größe wenn die die Records als packed deklarierst. |
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: |
Re: sizeof record
Das packed ist langsamer!
Vielleicht merkt man es bei großen und langen Schleifen! |
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. |
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.... |
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. |
Re: sizeof record
Moin Surrounder,
Zitat:
|
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: |
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