網頁

2017年8月18日 星期五

Delphi : record v.s. "packed" record

簡單結論 record 會依據結構 ( record )中最長的變數做 Alignment ,然而 packed record 不會。結果就是 packed record 佔的記憶體空間可能比 record 來的少。

範例
type
  // Declare an unpacked record
  TDefaultRecord = Record
    name1   : string[4];
    floater : single;
    name2   : char;
    int     : Integer;
  end;

  // Declare a packed record
  TPackedRecord = packed Record
    name1   : string[4];
    floater : single;
    name2   : char;
    int     : Integer;
  end;

var
  defaultRec : TDefaultRecord;
  packedRec  : TPackedRecord;

begin
  ShowMessage('Default record size = '+IntToStr(SizeOf(defaultRec)));
  ShowMessage('Packed record size = '+IntToStr(SizeOf(packedRec)));
end;

結果
   Default record size = 20
   Packed record size = 14

P.S. I didn't compile this code, I don't know why the size is 20 and 14. But the concept is reasonable.

沒有留言:

張貼留言

Python TypeError: 'module' object is not callable

程式碼其實相當簡單 import random random.random() 那問題出在哪?出在當初的檔名取名為 random.py 結果造成 Python 在 import 的時候造成問題。所以在取名Python 的檔名時,切記不要取成跟 Default Module...