以前一直使用的是Delphi 7,如今準備轉向Delphi XE7,聽說數據類型上有一些微小的調整,便想親自驗證一下,也順便加深一下本身對Delphi數據類型的認識,畢竟以前僅僅是在用而從未考慮過類型在內存中的形態。數組
驗證方法很簡單,就是在控制檯用Sizeof()把相應數據類型的字節數顯示出來。源碼以下:ide
program TypeSize; {$APPTYPE CONSOLE} uses SysUtils; type Emnu = (one, two, three, four); Range1 = $0..$FF; Range2 = $0..$FFFF; Range3 = $0..$FFFFFFFF; arr1 = array of Byte; arr2 = array[0..9] of Byte; arr3 = array[0..9] of Integer; rcd1 = record end; rcd2 = record b: Byte; end; rcd3 = record i: Integer; end; rcd4 = record i: Integer; j: Integer; end; rcd5 = record b: Byte; i: Integer; end; rcd6 = record r: Real; end; rcd7 = record r: Real; i: Integer; end; obj1 = object end; obj2 = object c: Char; end; obj3 = object i: Integer; o: obj2; end; begin Writeln(' Type | Bytes'); Writeln('--------------------------------'); Writeln('AnsiChar = ', SizeOf(AnsiChar)); Writeln('WideChar = ', SizeOf(WideChar)); Writeln('Char = ', SizeOf(Char)); Writeln('Byte = ', SizeOf(Byte)); Writeln('ShortInt = ', SizeOf(ShortInt)); Writeln('SmallInt = ', SizeOf(SmallInt)); Writeln('LongInt = ', SizeOf(LongInt)); Writeln('Int64 = ', SizeOf(Int64)); Writeln('Byte = ', SizeOf(Byte)); Writeln('Word = ', SizeOf(Word)); Writeln('LongWord = ', SizeOf(LongWord)); Writeln('Integer = ', SizeOf(Integer)); Writeln('Cardinal = ', SizeOf(Cardinal)); Writeln('Boolean = ', SizeOf(Boolean)); Writeln('ByteBool = ', SizeOf(ByteBool)); Writeln('WordBool = ', SizeOf(WordBool)); Writeln('LongBool = ', SizeOf(LongBool)); Writeln('Single = ', SizeOf(Single)); Writeln('Real48 = ', SizeOf(Real48)); Writeln('Double = ', SizeOf(Double)); Writeln('Extended = ', SizeOf(Extended)); Writeln('Comp = ', SizeOf(Comp)); Writeln('Currency = ', SizeOf(Currency)); Writeln('Real = ', SizeOf(Real)); Writeln('ShortString = ', SizeOf(ShortString)); Writeln('AnsiString = ', SizeOf(AnsiString)); Writeln('WideString = ', SizeOf(WideString)); Writeln('String = ', SizeOf(string)); Writeln('Variant = ', SizeOf(Variant)); Writeln('Pointer = ', SizeOf(Pointer)); Writeln('--------------------------------'); Writeln('Emnu = ', SizeOf(Emnu)); Writeln('Range(0,FF) = ', SizeOf(Range1)); Writeln('Range(0,FFFF) = ', SizeOf(Range2)); Writeln('Range(0,FFFFFFFF) = ', SizeOf(Range3)); Writeln('Array() = ', SizeOf(arr1)); Writeln('Array(10)Byte = ', SizeOf(arr2)); Writeln('Array(10)Int = ', SizeOf(arr3)); Writeln('Record() = ', SizeOf(rcd1)); Writeln('Record(1 byte) = ', SizeOf(rcd2)); Writeln('Record(1 int) = ', SizeOf(rcd3)); Writeln('Record(2 int) = ', SizeOf(rcd4)); Writeln('Record(1 byte, 1 int) = ', SizeOf(rcd5)); Writeln('Record(1 real) = ', SizeOf(rcd6)); Writeln('Record(1 real, 1 int) = ', SizeOf(rcd7)); Writeln('Object() = ', SizeOf(obj1)); Writeln('Object(1 char) = ', SizeOf(obj2)); Writeln('Object(1 int, 1 obj(char)) = ', SizeOf(obj3)); Readln; end.
分別用Delphi 7和Delphi XE7編譯,運行結果如圖:測試
從運行結果能夠看出:編碼