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

首頁 > 編程 > C > 正文

解析C語言中結構體struct的對齊問題

2020-01-26 14:38:41
字體:
來源:轉載
供稿:網友

首先看一下結構體對齊的三個概念值:

數據類型的默認對齊值(自身對齊):
1.基本數據類型:為指定平臺上基本類型的長度。如在32位機器中,char對齊值為1,short為2,int,float為4,double為8;
結構體:其數據成員中默認對齊值最大的那個值。
2.指定對齊值:#pragma pack (value)時的指定對齊值value。
3.數據類型的有效對齊值:默認對齊值和指定對齊值中小的那個值。
有了這些值,我們就可以很方便的來討論具體數據結構的成員和其自身的對齊方式。有效對齊值N是最終用來決定數據存放地址方式的值,最重要。有效對齊N,就是表示“對齊在N上”,也就是說該數據的“偏移量%N=0”。而數據結構中的數據變量都是按定義的先后順序來排放的。第一個數據變量的起始地址就是數據結構的起始地址。結構體的成員變量要對齊排放(對于非對齊成員需要在其前面填充一些字節,保證其在對齊位置上),結構體本身也要根據自身的有效對齊值圓整(就是結構體總長度需要是結構體有效對齊值的整數倍)。

通過上面的分析,對結構體進行字節對齊,我們需要知道四個值:

  • 指定對齊值:代碼中指定的對齊值,記為packLen;
  • 默認對齊值:結構體中每個數據成員及結構體本身都有默認對齊值,記為defaultLen;
  • 成員偏移量:即相對于結構體起始位置的長度,記為offset;
  • 成員長度:結構體中每個數據成員的長度(注結構體成員為補齊之后的長度),記為memberLen。

及兩個規則:

1.對齊規則:
offset % vaildLen = 0,其中vaildLen為有效對齊值vaildLen = min(packLen, defaultLen);

2.填充規則:
如成員變量不遵守對齊規則,則需要對其補齊;在其前面填充一些字節保證該成員對齊。需填充的字節數記為padLen:

padLen = getPadLen(offset , defaultLen);int getPadLen(int offsetLen, int defaultLen){  int vaildLen = min(packLen,defaultLen);  if(0 == vaildLen || 0 == offsetLen % vaildLen)  {    return 0;  }  return vaildLen - (offsetLen % vaildLen);}

結構體對齊算法思想:深度優先填充

先對齊內層結構體;
對每個數據成員計算其defaultLen、memberLen和offset;

再遍歷每個數據成員時計算;
對于基本數據類型成員defaultLen=memberLen;對于結構體成員defaultLen等于它的所有成員的最大的memberLen;
遍歷時對成員的memberLen進行累加,得到當前成員的offsetLen;
運用對齊及填充規則:在當前結構體成員前填充padLen個字節;


舉例說明:

struct{ short a; short b; short c; }A; sizeof(A) = 6; 

(vc6與gcc相同)

struct{ long a; short c; }A; sizeof(A) = 8;

(vc6與gcc相同), 它的內存分配為: a1 a2 a3 a4 , c1 c2 x x(a1為a的第一個字節,x為補齊字節,下同)

struct{int a;char b;short c; }A;sizeof(A) = 8;

A的內存分配為:

 a1 a2 a3 a4, b1 x c1 c2
struct{char a;int b;short c; }A1;sizeof(A1) = 12;

(vc6與gcc相同)

A1的內存分配為:

a1 x x x, b1 b2 b3 b4, c1 c2 x x

下面是更復雜的情況,結構體作為成員

struct{int a;doubl b;short c; }A; // sizeof(A) = 24 (vc6與gcc相同)struct{  char a,b;int c;double d;short e;struct A h;}B;sizeof(B) = 48 //(vc6與gcc相同)

A的內存分布:

a1 a2 a3 a4 x x x x, b1 b2 b3 b4 b5 b6 b7 b7, c1 c2 x x x x x x

B的內存分布:

a1 b1 x x, c1 c2 c3 c4 , d1 d2 d3 d4 d5 d6 d7 d8, e1 e2 x x x x 

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

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩精品在线播放| 久久影院模特热| 亚洲国产精品一区二区久| 亚洲乱码一区av黑人高潮| 91经典在线视频| 欧美性猛交xxxx富婆| 一区二区欧美日韩视频| 国产午夜精品一区理论片飘花| 日韩一区二区久久久| 国产欧美日韩免费| 欧美一级电影免费在线观看| 国产香蕉97碰碰久久人人| 国产亚洲aⅴaaaaaa毛片| 亚洲欧洲日产国码av系列天堂| 精品亚洲va在线va天堂资源站| 国产香蕉精品视频一区二区三区| 久久69精品久久久久久久电影好| 日韩国产精品亚洲а∨天堂免| 亚洲电影免费观看高清完整版在线| 欧美久久精品一级黑人c片| 日韩在线视频网| 国产精品入口尤物| 国内成人精品一区| 亚洲系列中文字幕| 38少妇精品导航| 欧美一级淫片丝袜脚交| 亚洲第一天堂av| 国产精品成人国产乱一区| 日韩欧美中文字幕在线播放| 欧美国产激情18| 国产亚洲美女精品久久久| 欧美性猛交xxxxx水多| 一区二区三区美女xx视频| 国产精自产拍久久久久久蜜| 88国产精品欧美一区二区三区| 欧美精品免费看| 成人在线观看视频网站| 国产精品一区二区av影院萌芽| 粉嫩老牛aⅴ一区二区三区| 成人久久一区二区| 精品日韩中文字幕| 成人网在线视频| 日韩精品在线观看一区| 亚洲精品自拍第一页| 欧美自拍视频在线观看| 久久琪琪电影院| 久久久精品2019中文字幕神马| 欧美激情综合色综合啪啪五月| 日韩av电影免费观看高清| 69久久夜色精品国产7777| 成人免费观看网址| 国产a∨精品一区二区三区不卡| 欧美亚洲视频在线观看| 亚洲娇小xxxx欧美娇小| 国产精品日韩精品| 欧美超级乱淫片喷水| 国产精品视频久久久久| 国产一区二中文字幕在线看| 日韩av中文字幕在线| 色www亚洲国产张柏芝| 91精品国产综合久久香蕉922| 欧美国产日韩视频| 欧美一级成年大片在线观看| 久久精品电影一区二区| 91在线精品视频| 日韩在线播放一区| 欧美另类极品videosbest最新版本| 一区二区三区在线播放欧美| 热99在线视频| 亚洲一区二区三区四区视频| 国产精品高潮粉嫩av| 亚洲欧美日韩成人| 亚洲美女av在线| 国产精品日韩在线播放| 日韩在线精品视频| 91在线观看免费高清| 国产精品视频免费观看www| 欧美成人在线免费视频| 欧美大片大片在线播放| 国语自产精品视频在免费| 国产精品第七十二页| 欧美国产日韩二区| 欧美激情亚洲精品| 欧美午夜精品久久久久久人妖| 成人黄色片在线| 国产精品久久久久久久久久东京| 欧美日本国产在线| 国产男人精品视频| 美女精品视频一区| 亚洲美女自拍视频| 欧美日韩免费区域视频在线观看| 亚洲人成电影网| 久久人人97超碰精品888| 亚洲成人av在线播放| 久久久久久亚洲| 欧美另类69精品久久久久9999| 精品av在线播放| 亚洲精品成人av| 国产精品黄视频| 成人免费看片视频| 久久成年人免费电影| 国产有码在线一区二区视频| 欧美中文字幕在线视频| 国产精品中文字幕在线| 奇门遁甲1982国语版免费观看高清| 亚洲国产三级网| 久久久久久久久久久免费| 国产精品伦子伦免费视频| 国产亚洲精品久久| 欧洲精品毛片网站| 日韩欧美黄色动漫| 91亚洲精品在线| 色妞一区二区三区| 超碰日本道色综合久久综合| 国产精品久久久久久久久男| 日韩av日韩在线观看| 最近中文字幕mv在线一区二区三区四区| 黑人极品videos精品欧美裸| 日本精品免费一区二区三区| 久久综合网hezyo| 色yeye香蕉凹凸一区二区av| 国产suv精品一区二区三区88区| 日韩精品极品视频| 国产日产欧美a一级在线| 国产精品88a∨| 欧洲亚洲女同hd| 国产成人91久久精品| 日韩精品免费在线视频观看| 亚洲精品视频中文字幕| 国产成人精品综合久久久| 视频在线一区二区| 日韩a**中文字幕| 欧美激情精品久久久久久免费印度| 国产精品入口夜色视频大尺度| 国产精品女人网站| 国产日本欧美一区| 欧美亚洲国产另类| 激情av一区二区| 日韩av在线一区| 亚洲人成在线播放| 日韩电视剧免费观看网站| 懂色av中文一区二区三区天美| 欧美性猛xxx| 久久九九热免费视频| 午夜精品一区二区三区在线视频| 国产欧美日韩中文字幕在线| 国产精品男女猛烈高潮激情| 欧美日韩亚洲一区二区| 欧美激情亚洲自拍| 亚洲欧美国产日韩中文字幕| 亚洲一区中文字幕在线观看| 欧美精品久久久久久久免费观看| 日韩在线观看免费| 精品福利在线观看| 最近2019免费中文字幕视频三| 久久精品精品电影网| 亚洲国产日韩欧美综合久久| 日韩成人中文字幕| 欧美精品第一页在线播放| 丝袜亚洲另类欧美重口| 国产精品高精视频免费| 欧美大码xxxx| 欧美性生交大片免费| 91九色单男在线观看|