Ver Mensaje Individual
  #3  
Antiguo 05-03-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Reputación: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola atani123.

Es tál como te indica juanelo, para un acceso mas veloz, Delphi alinea las estructuras a palabra o doble palabra. Podes comprimir el almacenamiento de datos usando la palabra reservada packed sobre el registro o de manera global usando la directiva {$A-}. Pero hace mas lento el acceso y puede traer incompatibilidad en el caso de que los datos sean caracteres.

El efecto se puede comprobar facilmente:
Código Delphi [-]
type
  rec1 = record
    factor: Single;
    offset: Single;
    id    : SmallInt;
  end;
  
  rec2 = packed record
    factor: Single;
    offset: Single;
    id    : SmallInt;
  end;

procedure TForm1.Button1Click(Sender: TObject);
var
  r1: rec1;
  r2: rec2;
begin
  with ListBox1.Items do
  begin
    Add('rec1 (record)');
    Add('-------------');
    Add(Format('factor: %d',[SizeOf(r1.factor)]));
    Add(Format('factor: %d',[SizeOf(r1.offset)]));
    Add(Format('factor: %d',[SizeOf(r1.id)]));
    Add(Format('Total: %d',[SizeOf(r1)]));
    Add('');
    Add('rec2 (packed record)');
    Add('-------------');
    Add(Format('factor: %d',[SizeOf(r2.factor)]));
    Add(Format('factor: %d',[SizeOf(r2.offset)]));
    Add(Format('factor: %d',[SizeOf(r2.id)]));
    Add(Format('Total: %d',[SizeOf(r2)]));
  end;
end;

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita