GCC下結構體內(nèi)存對齊問題

GCC下結構體內(nèi)存對齊問題

ID:38189802

大?。?4.13 KB

頁數(shù):6頁

時間:2019-05-24

GCC下結構體內(nèi)存對齊問題_第1頁
GCC下結構體內(nèi)存對齊問題_第2頁
GCC下結構體內(nèi)存對齊問題_第3頁
GCC下結構體內(nèi)存對齊問題_第4頁
GCC下結構體內(nèi)存對齊問題_第5頁
資源描述:

《GCC下結構體內(nèi)存對齊問題》由會員上傳分享,免費在線閱讀,更多相關內(nèi)容在行業(yè)資料-天天文庫。

1、引言:結構對齊的目的是為了加快CPU取數(shù)據(jù)時的速度,不同的編譯器有不同的標準,有關于4字節(jié)對齊的,也有關于8字節(jié)對齊的,解題時需跟據(jù)環(huán)境具體分析。   環(huán)境:ubuntu10.10gcc 判斷結構大小,只需要注意兩點即可: 1.分析結構成員: 小于4字節(jié)的結構成員,相對起始地址要在成員大小的倍數(shù)上 Char1char類型可以從任何地址開始 Short2short類型需要相對結構起始地址以2的倍數(shù)處開始 Int4 大于44對齊如double大小為8字節(jié),只需按4字節(jié)對齊即可 2.整個結構要關于最大的成員大小對齊(不大于4) 如果結構最大的成員是short那么結構的大小應是2的倍

2、數(shù),(不足時在結構末尾補足) 如果最大成員是int,則應是4的倍數(shù)。 如果是double,則是4的倍數(shù)。 為什么是4的倍數(shù)? 這是GCC默認的對齊大小,可以修改。VC下應該默認是8。 測試,以下結構的大小是? structcom { charc1;1字節(jié)由下面的對齊知道占用了4字節(jié) longtt;關于4字節(jié)對齊占用了4字節(jié) intc9;關于4字節(jié)對齊占用了4字節(jié) shortc3;關于2字節(jié)對齊占用了4字節(jié) doublec4;關于4字節(jié)對齊占用了8字節(jié) };4的倍數(shù),所以大小共24字節(jié)。 structT { chara; doubleb; }; structTT { shorta

3、; charb; shortaa; }; structA { charc; doubled; shorts; charsf[5]; }; structB { shorts; charsf[5]; charc; doubled; }; structC { charc; shorts; charsf[5]; doubled; }; structD { doubled; charsf[5]; shorts; charc; }; structE { charc; charsf[5]; doubled; shorts; };#includestructA{//QT/

4、Cfree下GCC下charc;//8byte4doubled;//8byte8shorts;//7byte4charsf[5];//24}a1;//24structB{shorts;//7byte2charsf[5];//05charc;//1byte1doubled;//8byte8}a2;//16structC{charc;//2byte1shorts;//7bytecharsf[5];//7doubled;//8byte}a3;//24structD{doubled;//13bytecharsf[5];//1shorts;//2bytecharc;//8byte}a4;in

5、tmain(){/*a.c='a';a.d=5.2356;a.s=3;//a.sf[5]="xuwe";不能這樣賦值*/printf("%d",sizeof(a1));printf("%d",sizeof(a2));printf("%d",sizeof(a3));printf("%d",sizeof(a4));//structAa1={'a',5.2356,3,"xuwe"};printf("%d",&a1.c);printf("%d",&a1.d);printf("%d",&a1.s);printf("%d",&a1.sf[5]);printf("

6、");printf("%d",&a2.s);printf("%d",&a2.sf[5]);printf("%d",&a2.c);printf("%d",&a2.d);printf("");printf("%d",&a3.c);printf("%d",&a3.s);printf("%d",&a3.sf[5]);printf("%d",&a3.d);printf("");printf("%d",&a4.d);printf("%d",&a4.sf[5]);printf("%d",&a4.s);printf("%d",&a4.c)

7、;printf("");return0;}

當前文檔最多預覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當前文檔最多預覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學公式或PPT動畫的文件,查看預覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權歸屬用戶,天天文庫負責整理代發(fā)布。如果您對本文檔版權有爭議請及時聯(lián)系客服。
3. 下載前請仔細閱讀文檔內(nèi)容,確認文檔內(nèi)容符合您的需求后進行下載,若出現(xiàn)內(nèi)容與標題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。