我有下一個代碼:爲什麼記錄的大小不等於其字段大小的總和?
type TRecord1 = record
myarr: array [0..31] of single:
end;
type TRecord2 = record
b1, b2, b3, b4, b5, b6: byte;
end;
type TRecord3 = record
myarr: array [0..31] of single:
b1, b2, b3, b4, b5, b6: byte;
end;
procedure TForm1.FormCreate(Sender: Tobject);
begin
ShowMessage(IntToStr(SizeOf(TRecord1))+'+'+IntToStr(SizeOf(TRecord2))+
'='+IntToStr(SizeOf(TRecord3)));
end;
該程序將顯示以下信息:
128+6=136
爲什麼SizeOf(TRecord3)
等於136,而不是134?
經驗法則:如果您打算在文件中使用某些結構 - 將它們聲明爲「packed」。 – OnTheFly 2012-03-21 15:03:22
我的經驗法則是永遠不會將記錄的二進制表示寫入文件 – 2012-03-21 17:21:13
是避免存儲二進制數據,但打包的指令在I/O(dll's,串行通信等)期間傳遞記錄時使用它。儘管使用標準化的二進制/字符串轉換技術應該適用於新的開發。 – 2012-03-21 18:11:08