Delphi中集合类型的变量在内存中是如何存放的?

解决方案 »

  1.   

    枚举类型集合按照位来存放的。如果集合大小是[0,8),占内存空间1个字节,大小是(8,16],占2个字节,(16,32)占4个字节,然后依次是每增加八个元素以内多用1个字节空间type TBit=(b1,b2,b3,b4,b5,b6,b7,b8);
    TBits=set of TBit;
    var Bits:TBits;bBit:byte absolute Bits;这样你就可以通过对Bits来访问设定每个二进制位,结果由bBit来访问其他类型集合就不太清楚了
      

  2.   

    集合本质是整数,通过位运算得知包含哪些元素。
    A= Set of (a,b,c);
    转换到二进制
    001,111分别就表示[a],[a,b,c]
    至于集合类型占几个字节由编译器决定.
    集合不超过8个元素就占1个字节.不超过16个元素就占2字节.
    超过16个元素就占4字节.
      

  3.   

    知道啦uses idGlobal;type  TMySet=Set of 0..9;var
      i: Integer;
      S: TMySet;
    begin
      for i:=0 to 9 do
      begin
        s:=[i];
        ShowMessage(IntToBin(Integer((@S)^)));
      end;
    end;
      

  4.   

    确实,枚举和集合类型无论在空间还是时间上应该都比 integer 快所以当我们要设置某个属性的多种可能性的时候,用枚举肯定好些