AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Frage zu record

Ein Thema von DelTurbo · begonnen am 10. Aug 2012 · letzter Beitrag vom 10. Aug 2012
Antwort Antwort
Seite 1 von 2  1 2      
DelTurbo

Registriert seit: 12. Dez 2009
Ort: Eifel
1.212 Beiträge
 
Delphi 2007 Architect
 
#1

Frage zu record

  Alt 10. Aug 2012, 10:12
Delphi-Version: 7
Hi,
ich habe einen Record. Der sieht wie folgt aus.

Delphi-Quellcode:
Type
   TKUIndexDaten = record
      Len      :Word;
      Erased      :Byte;
end;
Wenn ich nun mit SizeOf(TKUIndexDaten) die grösse abfrage, bekomm ich 4 zurück. Lasse ich "Len" weg, bekomme ich richtigerweise eine 1 zurück. Was mache ich falsch?

Danke im voraus
Alle meine Rechtschreibfehler sind Urheberrechtlich geschützt!!
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.767 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Frage zu record

  Alt 10. Aug 2012, 10:15
Hallo,

2 Byte -> Word
1 Byte padding
1 Byte -> Byte
Summe 4 Byte

Wenn Du ein packed record erstellst, sollte als size 3 Byte herauskommen.



Delphi-Quellcode:
Type
   TKUIndexDaten = packed record
      Len :Word;
      Erased :Byte;
end;
Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
DelTurbo

Registriert seit: 12. Dez 2009
Ort: Eifel
1.212 Beiträge
 
Delphi 2007 Architect
 
#3

AW: Frage zu record

  Alt 10. Aug 2012, 10:28
Das war es. Vielen Dank!!!
Alle meine Rechtschreibfehler sind Urheberrechtlich geschützt!!
  Mit Zitat antworten Zitat
Iwo Asnet

Registriert seit: 11. Jun 2011
313 Beiträge
 
#4

AW: Frage zu record

  Alt 10. Aug 2012, 10:36
packed records sind langsamer im Zugriff.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#5

AW: Frage zu record

  Alt 10. Aug 2012, 10:41
Langsamer: In diesem Fall definitiv nein.

Denn an den Daten selber hat sich nichts geändert, da nur das abschließende Leerbyte verwindet.


Aber im ansonsten jain ... kommt halt immer auf den jeweiligen Aufbau der Daten an und ob die CPU so oder Bytes rumshiften muß.

Im Allgemeinen hat die Speicherausrichtung schon ihre guten Gründe.


PS: Wenn es um Datenrecords für eine Dateiverwaltung oder Datenübertragung/Datenübergabe handelt, dann kommt es eben mehr auf das Format und nicht auf Optimierung an. (es sei denn man hat im Voraus das Datenformat/Protokoll entsprechend optimiert)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (10. Aug 2012 um 10:44 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#6

AW: Frage zu record

  Alt 10. Aug 2012, 10:42
http://docwiki.embarcadero.com/RADSt...turierte_Typen, da steht es ausführlich.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#7

AW: Frage zu record

  Alt 10. Aug 2012, 11:02
packed records sind langsamer im Zugriff.
Ja,
und welche Auswirkung hat das in der Praxis?
und
ob packed oder nicht, ist egal solange Du bei der Record-Definition entsprechende Rücksichten genommen hast.
Delphi-Quellcode:
record
   a : byte;
   b : word;
   c : integer;
   d : shortstring[8];
end;
Ist da nicht so der Bringer. Ist die Struktur von aussen vorgegeben, dann ist es eh müßig darüber zu diskutieren.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
DelTurbo

Registriert seit: 12. Dez 2009
Ort: Eifel
1.212 Beiträge
 
Delphi 2007 Architect
 
#8

AW: Frage zu record

  Alt 10. Aug 2012, 12:05
Das ist eine "Fremddatei" die ich einlese. Die hat knapp 200kb. Ich glaube kaum das man da einen Speedverlust bemerkt.

Trotzdem danke an alle...
Alle meine Rechtschreibfehler sind Urheberrechtlich geschützt!!
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Frage zu record

  Alt 10. Aug 2012, 12:12
Das Schreiben/Lesen in eine Datei kann aber eine weitere Stolperfalle darstellen. In diesem Fall sollte man auf ein Alignment verzichten und packed verwenden, da sonst Unterschiede in der Plattform Auswirkungen auf die Struktur der Datei haben ( eine unter 32Bit gespeicherte Datei wird dann unter 64Bit falsch interpretiert).
Markus Kinzler
  Mit Zitat antworten Zitat
Iwo Asnet

Registriert seit: 11. Jun 2011
313 Beiträge
 
#10

AW: Frage zu record

  Alt 10. Aug 2012, 12:25
Ich würde das nicht tun!
Denn packed records packen manchmal eben nicht so, wie man sich das denkt. Irgendwann (Arrays mit ungerader Länge) wird doch auf das nächst gerade Byte ausgerichtet und -wupps- hat man den Salat.

Lies die Daten lieber explizit über einen Stream Wert für Wert ein: Das geht so schnell, das merkst Du nicht. Spendiere also deinem Record eine Leseroutine
Delphi-Quellcode:
Type
   TKUIndexDaten = record
      Len :Word;
      Erased :Byte;
      Procedure LoadFromStream (stream : TStream);
   end;

Procedure TKUIndexDaten.LoadFromStream (stream : TStream);
begin
// Hier werden garantiert immer 3 Bytes gelesen (solange Word=2 Byte und Byte=1 Byte lang ist)
  stream.Read (Len, SizeOf(Len));
  stream.Read (Erased, SizeOf(Erased ));
End;
Um nun ein viele Records einzulesen rufst Du für jedes Element einfach die LoadFromStream-Methode auf.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:38 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