packed Record ,Record有什麼區別?分別用於何種情況 |
答題得分者是:shaofu
|
xiaoning79627
初階會員 發表:46 回覆:60 積分:26 註冊:2002-11-10 發送簡訊給我 |
|
Rain
資深會員 發表:31 回覆:236 積分:268 註冊:2003-02-17 發送簡訊給我 |
|
wnhoo
高階會員 發表:75 回覆:443 積分:198 註冊:2003-04-22 發送簡訊給我 |
用了packed后数据会压缩,但速度变慢。这就是两者的区别! 比如
packed record
aaa:byte
bbb:inetegr
ccc:byte
end //只占用6字节 而
record
aaa:byte
bbb:inetegr
ccc:byte
end //占用12个字节 delphi缺省使用 没有packed 的 Packed 还有一个要考虑的地方就是,如果你要做DLL的话,那么参数的传递就要用Packed的,否则很容易造成内存的写乱. 风花雪月 e梦情缘
------
风花雪月 e梦情缘 |
shaofu
高階會員 發表:5 回覆:136 積分:103 註冊:2003-01-07 發送簡訊給我 |
引言: packed Record ,Record有什麼區別?分別用於何種情況. >>< face="Verdana, Arial, Helvetica"> 一般為了效率考量, structure, array.. 之類的資料, complier 會把記億體做所謂 alignment (對齊?) 的調整, 這樣存取時會比較快速 舉個例子, 沒有特別調整 class="code"> type TTest = record x: integer; // 4 bytes y: char; // 1 byte, 但實際上會是占 4 bytes end; 你可以做一個簡單的測試, sizeof(TTest) 會等於 8 但如果加上 packed 時, 則 complier 不做 alignment, 這時就會是你真正定義的長度了:type TTest = packed record x: integer; // 4 bytes y: char; // 1 byte, 實際上也會是占 1 byte end;跑出來的結果, sizeof(TTest) 會等於 5 一般是不需 packed, 但如果需要這樣的應用 (如與dll接軌, 硬體控制), 就可能需要拿出來使用.. |
xiaoning79627
初階會員 發表:46 回覆:60 積分:26 註冊:2002-11-10 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |