作者clarkman (涼雨)
看板C_and_CPP
標題[問題] 結構對齊
時間Sun Mar 7 11:32:07 2010
我使用VC++2003
已把結構成員對齊四位元組打開
目前有一主要結構DATA和一個結構QUEUE
struct DATA
{
int a;
QUEUE c[50];
QUEUE d[17];
};
我會把資料備份到sram
要寫入a的時候就位移0,寫入c就位移sizeof(int)+sizeof(QUEUE)*count
-------------------------------
現在我多塞了一個int變數b
struct DATA
{
int a;
int b;
QUEUE c[50];
QUEUE d[17];
};
寫入a,位移0,寫入b,位移sizeof(int)
寫入C位移sizeof(int)*2+sizeof(QUEUE)*count
可是會發現b的值常會錯誤,c的資料也都是0
會因為資料要對齊,所以我寫入的位移不能直接用sizeof(int)嗎?
我看以前人的寫法好像都會盡量把結構湊出4的倍數
但是上網查了一下,還是不太清楚怎麼變化
還是我應該直接抓address相減,來算位移量?
~
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.46.168.18
※ 編輯: clarkman 來自: 114.46.168.18 (03/07 11:33)
推 VictorTom:的確最好是用address直接減出正確的offset....:) 03/07 11:51
推 layan:建議使用 offsetof 讓編譯器自已算 offset 比較安全 03/07 12:30
→ clarkman:我使用了樓上兩位的方法各測試一次,正確了!!感謝 03/07 15:48
推 VictorTom:原來還有offsetof這個函數, 又學到了一招....<(_ _)> 03/07 23:25
推 loveme00835:第一次看到 +1 @_@ 03/07 23:39