Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Record: Delphi only? (https://www.delphipraxis.net/71935-record-delphi-only.html)

gsh 22. Jun 2006 17:35

Re: Record: Delphi only?
 
packed record?

vorteile, nachteile?

SirThornberry 22. Jun 2006 17:37

Re: Record: Delphi only?
 
bei packed record liegen alle teile des records direkt hintereinander im speicher. lässt man das packed weg wird ausgerichtet.
Hat man zum beispiel ein byte im Record wird glaub ich (ich weiß es nicht genau) dahinter 3 Bytes platz gelassen damit es am 32-bit zugriff ausgerichtet ist und das ganze schneller ist.

gsh 22. Jun 2006 18:20

Re: Record: Delphi only?
 
aha k ich glaub ich bleib beim normallen record

himitsu 22. Jun 2006 19:00

Re: Record: Delphi only?
 
Zitat:

Zitat von gsh
aha k ich glaub ich bleib beim normallen record

nimm packed records ... in C sind eh alle Records packed, dann hast du also weniger Probleme :zwinker:

gsh 22. Jun 2006 19:04

Re: Record: Delphi only?
 
und wie schauts mit c++ und vb aus und so? verwenden die auch packed records?

himitsu 23. Jun 2006 10:33

Re: Record: Delphi only?
 
mit VB hab ich keine Ahnung, aber ich vermute mal, daß die da auch PACHED sind ... und beim C++, C# ... halt bei allen C-Varianten (soweit ich das verstanden hab), sind die so.


In Delphi ist hier standardmäßig ein 3-Byte-Zwischenraum, da der Integer an der nächsten 4-Byte-Grenze ausgerichtet wird.
Standard: {$A+}, was einem {$A4} entspricht
Das soll halt 'ne Optimierung sein, für einen schnelleren Zugriff ... auf einem 32-Bit-System

Delphi-Quellcode:
x = record
  B: Byte;
  // 3 Bytes
  i: Integer;
end;

x = packed record
  B: Byte;
  i: Integer;
end;

// 01234567
// B...iiii // normal
// Biiii    // packed
Du kannst ja da unten bestimmt erkennen, daß dort der Integer nicht an der selben Position liegt und es somit zu netten Problemchen kommen wird.

gsh 23. Jun 2006 10:37

Re: Record: Delphi only?
 
ja aber wenn ich jetzt überrall packed records verwende dann ist das kein problem auch bei anderen programmiersprachen nicht oder?

himitsu 23. Jun 2006 10:51

Re: Record: Delphi only?
 
Na ja, solange bei denen auch alles packed ist. ;)
(aber meistens sollte es keine Probleme geben)

Es hat ja auch noch andere Vorteile ... in Delphi ist ein ungepackter Record auch nicht immer gleich.
Ungepackt und bei anderen Ausrichtungen stimmt dort ja auch nichts mehr:
Code:
{$A4} B...iiii
{$A8} B.......iiii

gsh 23. Jun 2006 10:57

Re: Record: Delphi only?
 
gut danke

Oxmyx 23. Jun 2006 11:34

Re: Record: Delphi only?
 
In C++ sind Strukturen keineswegs immer "packed". Standardmäßig richtet VC++ z.B. auf 8 Bytes aus. Ändern kann man das mit der Compilereinstellung "Strukturmitglieder ausrichten" oder dem Pragma-Befehl "pack", also z.B. "#pragma pack(1)".


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:23 Uhr.
Seite 2 von 4     12 34      

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