offsetof計算問題 |
答題得分者是:AndrewK
|
GGL
資深會員 發表:104 回覆:600 積分:335 註冊:2006-11-05 發送簡訊給我 |
http://www.soe.ucsc.edu/classes/cmpe225/Fall01/portest.txt
中有一段, [code cpp] DataLength = offsetof(PORT_WRITE_INPUT, CharData) sizeof(InputBuffer.CharData); [/code] 因為我不懂為什麼DataLength可以用offsetof的方式計算,做了下面的測試 [code cpp] typedef struct _PORT_WRITE_INPUT { long PortNumber; union { long LongData; short ShortData; char CharData; }; int IntData; } PORT_WRITE_INPUT; PORT_WRITE_INPUT InputBuffer; cout<<"offsetof(PORT_WRITE_INPUT, PortNumber) : "< 得到結果如下: offsetof(PORT_WRITE_INPUT, PortNumber) : 0 sizeof(InputBuffer.PortNumber)4 offsetof(PORT_WRITE_INPUT, LongData) : 4 sizeof(InputBuffer.LongData)4 offsetof(PORT_WRITE_INPUT, ShortData) : 4 sizeof(InputBuffer.ShortData)2 offsetof(PORT_WRITE_INPUT, CharData) : 4 sizeof(InputBuffer.CharData)1 offsetof(PORT_WRITE_INPUT, IntData) : 8 sizeof(InputBuffer.IntData)4 struct做一點更動 [code cpp] typedef struct _PORT_WRITE_INPUT { long PortNumber; long LongData; short ShortData; char CharData; int IntData; } PORT_WRITE_INPUT; [/code] 得到結果如下: offsetof(PORT_WRITE_INPUT, PortNumber) : 0 sizeof(InputBuffer.PortNumber)4 offsetof(PORT_WRITE_INPUT, LongData) : 4 (我以為是0 4) sizeof(InputBuffer.LongData)4 offsetof(PORT_WRITE_INPUT, ShortData) : 8 (我以為是4 4) sizeof(InputBuffer.ShortData)2 offsetof(PORT_WRITE_INPUT, CharData) : 10 (我以為是8 2) sizeof(InputBuffer.CharData)1 offsetof(PORT_WRITE_INPUT, IntData) : 12 (我以為是10 1=11?) sizeof(InputBuffer.IntData)4 因為第二個測試結果讓我對offsetof有點混亂,請問此原理是什麼? 謝謝 編輯記錄
GGL 重新編輯於 2009-08-24 14:20:59, 註解 無‧
|
AndrewK
高階會員 發表:6 回覆:151 積分:161 註冊:2006-10-09 發送簡訊給我 |
測試環境:BCB 2006
加入這一行 改變 data alignment [code cpp] #pragma pack(1) [/code] 結果就如您所預期的一樣 data alignment 我的預設值為 4 以下文章也可以參考 http://delphi.ktop.com.tw/board.php?cid=168&fid=912&tid=98931
------
Just Do It ------------------------- 其實男生不是真的喜歡你不減肥,而是喜歡你愛吃還不肥;也不是真的喜歡你不化妝,而是喜歡你素顏也好看;也不是真的喜歡你瘦,而是喜歡你瘦卻有胸;也不是真喜歡你獨立,而是他忙的時候別煩他。女孩子,太認真你就輸了。 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |