亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

教你5分鐘輕松搞定內存字節對齊

2020-01-26 15:51:42
字體:
來源:轉載
供稿:網友

寫出一個struct,然后sizeof,你會不會經常對結果感到奇怪?sizeof的結果往往都比你聲明的變量總長度要大,這是怎么回事呢?講講字節對齊吧.

/******************************分割線

如果體系結構是不對齊的,A中的成員將會一個挨一個存儲,從而sizeof(a)為11。顯然對齊更浪費了空間。那么為什么要使用對齊呢?

體系結構的對齊和不對齊,是在時間和空間上的一個權衡。對齊節省了時間。假設一個體系結構的字長為w,那么它同時就假設了在這種體系結構上對寬度為w的數據的處理最頻繁也是最重要的。它的設計也是從優先提高對w位數據操作的效率來考慮的。比如說讀寫時.............此處省略50萬字

*******************************************************/

上面是你隨便google一下,人家就可以跟你解釋的,一大堆的道理,我們沒怎么多時間,討論為何要對齊.直入主題,怎么判斷內存對齊規則,sizeof的結果怎么來的,請牢記以下3條原則:(在沒有#pragma pack宏的情況下,務必看完最后一行)

1:數據成員對齊規則:結構(struct)(或聯合(union))的數據成員,第一個數據成員放在offset為0的地方,以后每個數據成員存儲的起始位置要從該成員大小或者成員的子成員大?。ㄖ灰摮蓡T有子成員,比如說是數組,結構體等)的整數倍開始(比如int在32位機為4字節,則要從4的整數倍地址開始存儲。

2:結構體作為成員:如果一個結構里有某些結構體成員,則結構體成員要從其內部最大元素大小的整數倍地址開始存儲.(struct a里存有struct b,b里有char,int ,double等元素,那b應該從8的整數倍開始存儲.)

3:收尾工作:結構體的總大小,也就是sizeof的結果,.必須是其內部最大成員的整數倍.不足的要補齊.

等你看完此3條原則,2分鐘已經過去,抓緊時間,實戰3分鐘:

復制代碼 代碼如下:

typedef struct bb
{
 int id;             //[0]....[3]
 double weight;      //[8].....[15]      原則1
 float height;      //[16]..[19],總長要為8的整數倍,補齊[20]...[23]     原則3
}BB;

typedef struct aa
{
 char name[2];     //[0],[1]
 int  id;         //[4]...[7]          原則1

 double score;     //[8]....[15]    
 short grade;    //[16],[17]        
 BB b;             //[24]......[47]          原則2
}AA;

int main()
{
  AA a;
  cout<<sizeof(a)<<" "<<sizeof(BB)<<endl;
  return 0;
}


結果是

48 24
ok,上面的全看明白了,內存對齊基本過關.

再講講#pragma pack().

在代碼前加一句#pragma pack(1),你會很高興的發現,上面的代碼輸出為

32 16
bb是4+8+4=16,aa是2+4+8+2+16=32;

這不是理想中的沒有內存對齊的世界嗎.沒錯,#pragma pack(1),告訴編譯器,所有的對齊都按照1的整數倍對齊,換句話說就是沒有對齊規則.

明白了不?

那#pragma pack(2)的結果又是多少呢?對不起,5分鐘到了,自己去測試吧.

ps:Vc,Vs等編譯器默認是#pragma pack(8),所以測試我們的規則會正常;注意gcc默認是#pragma pack(4),并且gcc只支持1,2,4對齊。套用三原則里計算的對齊值是不能大于#pragma pack指定的n值。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲一区中文字幕在线观看| 日韩av影视在线| 亚洲国产精品视频在线观看| 人人爽久久涩噜噜噜网站| 538国产精品一区二区在线| 精品国产一区二区三区在线观看| 亚洲级视频在线观看免费1级| 日韩电影大片中文字幕| 色综合视频一区中文字幕| 91精品美女在线| 日韩视频欧美视频| 色婷婷亚洲mv天堂mv在影片| 国产日韩中文字幕| 午夜精品免费视频| 66m—66摸成人免费视频| 91九色国产视频| 91日韩在线播放| 亚洲成av人影院在线观看| 在线视频日本亚洲性| 久久色免费在线视频| 日韩精品日韩在线观看| 亚洲日本aⅴ片在线观看香蕉| 57pao国产精品一区| 亚洲福利精品在线| 97热精品视频官网| 亚洲加勒比久久88色综合| 成人激情在线观看| 日韩精品一区二区三区第95| 亚洲视频欧洲视频| 欧洲美女7788成人免费视频| 91在线国产电影| 日韩精品视频在线免费观看| 精品国产91乱高清在线观看| 亚洲精品国偷自产在线99热| 国产乱肥老妇国产一区二| 亚洲激情成人网| 亚洲精品一区av在线播放| 91在线精品视频| 视频直播国产精品| 国产欧美日韩中文字幕在线| 成人激情春色网| 欧美中文字幕视频| 国产丝袜一区视频在线观看| 亚洲成人亚洲激情| 欧美日韩第一页| 亚洲天堂免费观看| 亚洲成人激情视频| 青青青国产精品一区二区| 亚洲人成人99网站| 欧洲精品久久久| 黑人巨大精品欧美一区二区三区| 中文字幕久精品免费视频| 欧美日韩一区二区三区在线免费观看| 亚洲天堂av电影| 欧美电影免费看| 国产精品99蜜臀久久不卡二区| 久久综合网hezyo| 中文字幕日本精品| 亚洲欧美福利视频| 国产精品福利在线观看网址| 国产日韩中文字幕在线| 久久国产精品免费视频| 日韩欧美国产一区二区| 中文字幕欧美视频在线| 色狠狠av一区二区三区香蕉蜜桃| 91大神在线播放精品| 亚洲第一综合天堂另类专| 欧美日韩高清在线观看| 岛国精品视频在线播放| 一本大道香蕉久在线播放29| 久久国产精品久久精品| 精品成人久久av| 成人福利网站在线观看11| 欧美激情精品久久久久久久变态| 久久综合久久美利坚合众国| 国产亚洲人成a一在线v站| 欧美激情第99页| 日韩成人激情视频| 欧美激情一级精品国产| 超碰精品一区二区三区乱码| 热99精品只有里视频精品| 国产美女久久精品| 国产成人精品视频在线| 久久久www成人免费精品张筱雨| 欧美日韩在线免费| 国产精品极品美女在线观看免费| 欧日韩在线观看| 亚洲一区国产精品| 26uuu亚洲伊人春色| 青青精品视频播放| 青青久久aⅴ北条麻妃| 中文日韩在线视频| 美女黄色丝袜一区| 久久九九有精品国产23| 69久久夜色精品国产7777| 亚洲国产精品久久久久| 欧美综合在线观看| 欧美性受xxx| 国产成人精品国内自产拍免费看| 欧美成人亚洲成人| 在线视频国产日韩| 日韩禁在线播放| 久热精品视频在线| 亚洲福利视频在线| 精品久久在线播放| 日本人成精品视频在线| 精品久久久久久国产91| 韩国欧美亚洲国产| 精品亚洲永久免费精品| 亚洲欧美另类自拍| 在线精品高清中文字幕| 国产亚洲精品久久久久动| 亚洲欧美自拍一区| 黑人巨大精品欧美一区免费视频| 精品亚洲永久免费精品| 91亚洲精品视频| 久久视频在线免费观看| 91亚洲永久免费精品| 国产精品小说在线| 国产精品国产亚洲伊人久久| 国产精品入口尤物| 国产精品精品一区二区三区午夜版| 国产精品露脸自拍| 91嫩草在线视频| 日韩av免费在线看| 欧美性极品xxxx做受| 亚洲欧美国产日韩天堂区| 韩国日本不卡在线| 国产精品欧美亚洲777777| 国产精品一区二区3区| 日韩av日韩在线观看| 亚洲护士老师的毛茸茸最新章节| 中文字幕亚洲第一| 成人国产精品日本在线| 国产精品亚洲一区二区三区| 福利视频导航一区| 91精品国产综合久久久久久蜜臀| 68精品久久久久久欧美| 日韩在线观看你懂的| 91精品视频在线播放| 国产精品久久久久久久久久东京| 日韩成人在线视频网站| 久久精品中文字幕免费mv| 国产精品成av人在线视午夜片| 97精品一区二区视频在线观看| 精品视频在线播放免| 欧美韩日一区二区| 成人黄色在线免费| 免费av在线一区| 亚洲精品久久久久中文字幕二区| 亚洲美女动态图120秒| 日韩免费av一区二区| 一本一本久久a久久精品牛牛影视| 色妞色视频一区二区三区四区| 国产亚洲欧洲在线| 欧美在线观看一区二区三区| 亚洲网址你懂得| 亚洲影院高清在线| 亚洲精品国产免费| 亚洲一区二区少妇| 精品无码久久久久久国产| 国产精品免费一区| 亚洲欧美日本精品| 久久久久久久久国产精品|