Einzelnen Beitrag anzeigen

Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#2

AW: Variablen Definition

  Alt 22. Jun 2011, 19: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
  Mit Zitat antworten Zitat