Eso lo aseguro, que el compilador lo reduce a la mínima expresión, tenía la idea de que había una directiva al compilador para modificar esto, pero no la encotré.
Por otro lado, aquí tienen un ejemplo como otros conjuntro extaños siguen ocupando lo mínimo indispensable:
Código Delphi
[-]
type
TMiTipo1 = (msValorA1, msValorA2, msValorA3);
TMiSet1 = set of TMiTipo1;
TMiTipo2 = (msValorB1 = 253, msValorB2, msValorB3);
TMiSet2 = set of TMiTipo2;
{$MINENUMSIZE 4}
TMiTipo3 = (msValorC1, msValorC2, msValorC3);
TMiSet3 = set of TMiTipo3;
{$MINENUMSIZE 1}
TMiTipo4 = 0..31;
TMiSet4 = set of TMiTipo4;
TMiTipo5 = 1..32;
TMiSet5 = set of TMiTipo5;
TMiTipo6 = 'a'..'z';
TMiSet6 = set of TMiTipo6;
....
procedure TForm1.FormCreate(Sender: TObject);
begin
Memo1.Lines.Add(Format('1> Tamaño: %d Tipo: %d Valor del Primer Item:%d', [SizeOf(TMiSet1), SizeOf(TMiTipo1), Integer(msValorA1)]));
Memo1.Lines.Add(Format('2> Tamaño: %d Tipo: %d Valor del Primer Item:%d', [SizeOf(TMiSet2), SizeOf(TMiTipo2), Integer(msValorB1)]));
Memo1.Lines.Add(Format('3> Tamaño: %d Tipo: %d Valor del Primer Item:%d', [SizeOf(TMiSet3), SizeOf(TMiTipo3), Integer(msValorC1)]));
Memo1.Lines.Add(Format('4> Tamaño: %d Tipo: %d', [SizeOf(TMiSet4), SizeOf(TMiTipo4)]));
Memo1.Lines.Add(Format('5> Tamaño: %d Tipo: %d', [SizeOf(TMiSet5), SizeOf(TMiTipo5)]));
Memo1.Lines.Add(Format('6> Tamaño: %d Tipo: %d', [SizeOf(TMiSet6), SizeOf(TMiTipo6)]));
end;
Saludos!