AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Was bringt ein "packed" bei "record packed"?
Thema durchsuchen
Ansicht
Themen-Optionen

Was bringt ein "packed" bei "record packed"?

Ein Thema von Helmi · begonnen am 2. Jan 2009 · letzter Beitrag vom 2. Jan 2009
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.312 Beiträge
 
Delphi XE2 Professional
 
#1

Was bringt ein "packed" bei "record packed&qu

  Alt 2. Jan 2009, 09:45
Hallo,

was ich immer schon mal fragen wollte, was bringt ein "packed" bei "record packed"?

Aus der Hilfe werd ich nicht so ganz schlau:
Zitat von Delphi-Hilfe:
Per Voreinstellung sind die Werte in einem strukturierten Typ in einem Word- oder Double-Word-Raster ausgerichtet, um den Zugriff zu beschleunigen. Wenn Sie einen strukturierten Typ deklarieren, können Sie das reservierte Wort packed einfügen, um die Daten in komprimierter Form zu speichern:

type TNumbers = packed array[1..100] of Real;

Die Verwendung von packed verlangsamt den Zugriff auf die Daten. Im Falle eines Zeichen-Arrays beeinflusst packed auch die Kompatibilität der Typen.
Das heisst es: "um die Daten in komprimierter Form zu speichern", aber wie wird das gemacht?
Was für einen Vorteil hat das packed?
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Was bringt ein "packed" bei "record packe

  Alt 2. Jan 2009, 09:55
Normalerweise sind die Daten in einem Record an 4-Byte Grenzen ausgerichtet. Beispiel:
Delphi-Quellcode:
TDemo = record
  b: Byte;
  c: Byte;
end;
Ausrichtung im Speicher:
Code:
0  1  2  3  |  4  5  6  7
b b       |  c c
Deklarierst du den Record als packed sieht der Record im Speicher wie folgt aus:
Code:
0  1  2  3
b b c c
Die Ausrichtung an 4-Byte Grenzen macht die Verarbeitung einfacher, weil eine 32-.Bitz CPU sowieso immer 4-Byte auf einmal aus dem Speicher holt, egal, um was für einen datentyp es sich handelt. Sind die daten jetzt an 4-Byte Grenzen ausgerichtet, muss die CPU die Daten nicht noch "nachbearbeiten". Man hat also einen Performance Vorteil. Allerdings aus Sicht des Programmierers ist es praktischer einen Record als packed zu deklarieren, da man keine Probleme bekommt, wenn sich in Zukunft die Ausrichtung ändert; auf 64-Bit CPUs zum Beispiel.

Dann muss man noch manchmal berücksichtigen, wie API-Funktionen Strukturen übergeben haben wollen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.312 Beiträge
 
Delphi XE2 Professional
 
#3

Re: Was bringt ein "packed" bei "record packe

  Alt 2. Jan 2009, 09:59
Danke für die anschauliche Erklärung!

Dann kann ich daraus schliessen, dass ein "packed" den Speicherverbrauch der Application vermindert?
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Was bringt ein "packed" bei "record packe

  Alt 2. Jan 2009, 10:02
Siehe noch mein Edit.

Zu deiner Frage, ja. Aber fallen die Größenordnungen ins Gewicht? Wichtiger ist es eher nicht mehr benötigte Objekte udn Speicher wieder frei zu geben.

Mit einem Compilerschlater kann man übrigens das Alignment anpassen. Das nur noch der Vollständigkeit halber.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.312 Beiträge
 
Delphi XE2 Professional
 
#5

Re: Was bringt ein "packed" bei "record packe

  Alt 2. Jan 2009, 10:04
Also gehts mehr nur um die Aufwärtskompatibiltät (klingt komisch) der Software auf zukünftigere Systeme...
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Oreaden

Registriert seit: 10. Nov 2008
60 Beiträge
 
#6

Re: Was bringt ein "packed" bei "record packe

  Alt 2. Jan 2009, 10:05
Zitat von Luckie:
aus Sicht des Programmierers ist es praktischer einen Record als packed zu deklarieren, da man keine Probleme bekommt, wenn sich in Zukunft die Ausrichtung ändert; auf 64-Bit CPUs zum Beispiel.
Einen schönen Guten Morgen Luckie,

wie kann man sich das Vorstellen, dass hierbei Probleme auftreten werden? Aktuell sind wir, das Orakel und ich, am rätseln und die Kristallkugel bringt nur wirres Zeug. Außerdem, was hat dies mit einer 64Bit CPU zu tun

Ratlose Grüße
OREADEN
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Was bringt ein "packed" bei "record packe

  Alt 2. Jan 2009, 10:14
Nehmen wir an es gibt einen 64-Bit Compiler. Dort wird das Alignment bei 64-Bit liegen und nicht bei 32-Bit. Jetzt hast du folgenden Record deklariert:
Delphi-Quellcode:
TKontakt = record
  Name: String[25];
  Vorname: String[15];
  Telefonnumer: String[12];
end;
Diesen schreibst du in eine Datei und liest ihn auch wieder aus. Kompilierst du dein Programm mit einer 32-bittigen Ausrichtung klappt alles wunderbar. Jetzt hast du einen 64-Bit Compiler und compilierst das Programm neu. Schon hast du nur noch Datenmüll beim Lesen, weil die Daten mit einer 32-Bit Ausrichtung geschrieben wurden. Das kann man natürlich beheben, in dem man per Compilerschalter wieder eine 32-Bit Ausrichtung erzwingt. Aber denkt man auch daran? Oder sucht man den Fehler an allen möglichen anderen Stellen? Und solche Probleme erspart man sich, wenn man den Record als packed deklariert, dann kann man das Programm mit jeden beliebigen Alignment kompilieren und es funktioniert. Ist sinnvoll, wenn man Prgrammcode weitergibt oder mit anderen Programmierer zusammenarbeitet. Erspart eben viel Ärger. Und wenn man in eine Datei schreibt, wird der Overhead auch kleiner.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.481 Beiträge
 
Delphi 10.1 Berlin Professional
 
#8

Re: Was bringt ein "packed" bei "record packe

  Alt 2. Jan 2009, 10:18
Zitat von Luckie:
Kompilierst du dein Programm mit einer 32-bittigen Ausrichtung klappt alles wunderbar.
Bis auf, dass man auch Daten, die gar nicht zum Record gehören schreibt, da sie zwischen den einzelnen ausgerichteten Record-Feldern liegen.

Übrigens, das Vorgabe-Alignment liegt (auch schon bei Delphi 7 ) bei 8 Byte und nicht wie hier mehrmals erwähnt bei 4 Byte.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Was bringt ein "packed" bei "record packe

  Alt 2. Jan 2009, 10:35
Zitat von jbg:
Übrigens, das Vorgabe-Alignment liegt (auch schon bei Delphi 7 ) bei 8 Byte und nicht wie hier mehrmals erwähnt bei 4 Byte.
Gut, spielt aber für das Verständnis keine Rolle.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.312 Beiträge
 
Delphi XE2 Professional
 
#10

Re: Was bringt ein "packed" bei "record packe

  Alt 2. Jan 2009, 10:52
Danke für die Erklärungen
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  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 18:18 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