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 2 von 2     12   
Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#11

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

  Alt 2. Jan 2009, 12:03
Außerdem ist packed wichtig, wenn du zum Beispiel direkt Bitmaps aus dem Speicher auslesen willst. Diese haben oftmals eine Bittiefe von 24 Bit (3 Byte) pro Pixel. Es gibt allerdings keinen Datentyp, der 3 Byte breit ist.

Mit...
Delphi-Quellcode:
type
  TRGBRec = packed record
    r, g, b: Byte;
  end;
...kannst du dir einen genau 3 Byte breiten Typ erstellen, und mit diesem direkt auf jeden Pixel deines Bitmaps zugreifen. Ohne das "packed" währe der Record 24 Byte breit.
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#12

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

  Alt 2. Jan 2009, 12:05
Hallo,

ich möchte Michaels Ausführung in Beitrag #2 teilweise widersprechen. Der von ihm als Beispiel angeführte Record belegt auch im "ungepackten" Zustand immer 2 Bytes im Speicher - selbst bei der Ausrichtung Quad Word. Interessant wird es erst, wenn man zwischen die beiden Bytes einen Integer-Wert einfügt. In diesem Fall wächst der Speicherplatzbedarf des ungepackten Records auf 12 Bytes an.

Gruß Hawkeye
  Mit Zitat antworten Zitat
Reinhard Kern

Registriert seit: 22. Okt 2006
772 Beiträge
 
#13

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

  Alt 2. Jan 2009, 13:50
Hallo,

auf die Gefahr hin Prügel dafür zu beziehen möchte ich doch noch auf die Welt ausserhalb Delphi hinweisen: z.B. Datenstrukturen in WIN32 sind normalerweise direkt gespeichert wie beschrieben, word, byte usw. folgt ohne Lücken aufeinander. Man muss daher fast immer Records, die in einer anderen Sprache definiert wurden, in Delphi als packed deklarieren - gilt also besonders bei Benutzung von DLLs.

Gruss Reinhard
  Mit Zitat antworten Zitat
Benutzerbild von Sunlight7
Sunlight7

Registriert seit: 17. Sep 2006
Ort: Sonnensystem, Zentral
1.522 Beiträge
 
Delphi 5 Standard
 
#14

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

  Alt 2. Jan 2009, 20:14
Zitat von igel457:
Ohne das "packed" währe der Record 24 Byte breit.
Sicher?


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:
Windows: Ja - Microsoft: Nein -> www.ReactOS.org
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#15

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

  Alt 2. Jan 2009, 20:34
Zitat:
Sicher
Da hat wohl jemand vergessen, dass Byte-Felder überhaupt nicht ausgerichtet werden und als "Lückenfüller" dienen. Zudem ist 24 Byte gänzlich falsch. 24 Bit würde passen

Zitat von Sunlight7:
Delphi Hilfe
Die Delphi Hilfe ist nicht immer korrekt (und aktuell). Die Hilfe bezieht sich in diesem Fall noch auf Delphi 5. Ab Delphi 6 ist die Ausrichtung auf Quad-Word ( 8 Bytes ) der Standard.

Code:
Borland Delphi Version 14.0
...
Compiler-Schalter: $<buchst><status> (Vorgabewerte siehe unten)
  A8  Ausgerichtete Record-Felder
  ...
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 05:55 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