Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
FreePascal / Lazarus
|
AW: Variablen Definition
22. Jun 2011, 20:23
Ein Freund von mir meinte, es macht einen Unterschied, ob man Variablen nach dem Schema A oder Schema B definiert
[…]
Stimmt das so?
Nein.
Delphi-Quellcode:
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.
Ausgabe:
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
|
|
Zitat
|