Delphi中的記憶體對齊 與 Packed關鍵字
阿新 • • 發佈:2019-02-18
Record的資料各個位元組都是對齊的,資料格式比較完整,所以這種格式相對packed佔用的記憶體比較大,
但是因為格式比較整齊,所以電腦讀取這個型別的資料的時候速度比較快。
而Packed 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
不過,對於現在的作業系統來,packed Record 節省的那些空間已不用考慮他了。除了做DLL(不用packed容易造成記憶體混亂)和做硬體
程式設計時(比如串列埠)程式設計時必須用到packed Record,其它情況都可以用Record
但是因為格式比較整齊,所以電腦讀取這個型別的資料的時候速度比較快。
而Packed 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
不過,對於現在的作業系統來,packed Record 節省的那些空間已不用考慮他了。除了做DLL(不用packed容易造成記憶體混亂)和做硬體
程式設計時(比如串列埠)程式設計時必須用到packed Record,其它情況都可以用Record