Delphi-Version: 2006
Variablen Definition
Ein Freund von mir meinte, es macht einen Unterschied, ob man Variablen nach dem Schema A oder Schema B definiert
Delphi-Quellcode:
Er meinte nämlich, dass bei Variante B für die Vier 1 Byte Elemente nur 1 DWord (also wirklich 4 Bytes) reserviert werden und bei A eben für jedes Feld 4 Bytes (vlt weil dadurch - also 32 Bit - es schneller läuft?)
// A
type TMyRecordA = record _1: Byte; _2: Byte; _3: Byte; _4: Byte; end; // B type TMyRecordB = record _1, _2, _3, _4: Byte; end; Stimmt das so? Falls ja, ist das "packed" genau dafür da, damit dies nicht geschieht? also ist C = B, sofern A <> B
Delphi-Quellcode:
Edit:
// C
type TMyRecordC = packed record _1: Byte; _2: Byte; _3: Byte; _4: Byte; end; Obwohl --> sizeof(TMyRecordA) = sizeof(TMyRecordB) = sizeof(TMyRecordC). |
AW: Variablen Definition
Zitat:
Delphi-Quellcode:
Ausgabe:
program recordalign;
{$APPTYPE CONSOLE} uses SysUtils; type TRec1A = record _1: Byte; _2: Byte; _3: Byte; _4: Byte; end; TRec1B = record _1, _2, _3, _4: Byte; end; TRec1C = packed record _1: Byte; _2: Byte; _3: Byte; _4: Byte; end; // mit integer in der mitte der das alignment beeinflusst: TRec2A = record _1: Byte; _2: Byte; _int: integer; _3: Byte; _4: Byte; end; TRec2B = record _1, _2: Byte; _int: integer; _3, _4: Byte; end; TRec2C = packed record _1: Byte; _2: Byte; _int: integer; _3: Byte; _4: Byte; end; begin WriteLn('1 (4 bytes):'); WriteLn('Record 1A: ', SizeOf(TRec1A)); WriteLn('Record 1B: ', SizeOf(TRec1B)); WriteLn('Record 1C: ', SizeOf(TRec1C)); WriteLn(''); WriteLn('2 (2 bytes, 1 int, 2 bytes):'); WriteLn('Record 2A: ', SizeOf(TRec2A)); WriteLn('Record 2B: ', SizeOf(TRec2B)); WriteLn('Record 2C: ', SizeOf(TRec2C)); readln; end.
Code:
1 (4 bytes):
Record 1A: 4 Record 1B: 4 Record 1C: 4 2 (2 bytes, 1 int, 2 bytes): Record 2A: 12 Record 2B: 12 Record 2C: 8 |
AW: Variablen Definition
Ahh ne habs, also es ist falsch, was er meinte aber das packed (no-Alignment) macht den unterschied bei ner Größe von 4x:
Delphi-Quellcode:
sizeof(TMyTypeA) 8
TMyTypeA = record
A: Integer; B: Byte; end; TMyTypeB = packed record A: Integer; B: Byte; end; sizeof(TMyTypeB) 5 Die Frage hat sich erübrigt =) Btw ty |
AW: Variablen Definition
Zitat:
Version A und Version B sind identisch, nur unterschiedliche Schreibweisen. |
AW: Variablen Definition
Alles klar, war ja auch mein Gedanke :D
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:34 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