青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

posts - 297,  comments - 15,  trackbacks - 0

C++----字節(jié)對齊方式

整理自http://www.shnenglu.com/andxie99/archive/2006/10/26/14230.html

字節(jié)對齊的細節(jié)和編譯器實現(xiàn)相關(guān),但一般而言,滿足三個準(zhǔn)則:

1)             結(jié)構(gòu)體變量的首地址能夠被其最寬基本類型成員的大小所整除;

2)              結(jié)構(gòu)體每個成員相對于結(jié)構(gòu)體首地址的偏移量(offset)都是該成員大小的整數(shù)倍,如果是復(fù)合成員則應(yīng)該是該復(fù)合成員最寬基本類型大小的整數(shù)倍,如有需要編譯器會在成員之間加上填充字節(jié)(internal adding);

3)              結(jié)構(gòu)體的總大小為結(jié)構(gòu)體最寬基本類型成員大小的整數(shù)倍,如有需要編譯器會在最末一個成員之后加上填充字節(jié)(trailing padding)。

對于上面的準(zhǔn)則,有幾點需要說明:

1)                  基本類型是指前面提到的像char、short、int、float、double這樣的內(nèi)置數(shù)據(jù)類型,這里所說的“數(shù)據(jù)寬度”就是指其sizeof的大小。由于結(jié)構(gòu)體的成員可以是復(fù)合類型,比如另外一個結(jié)構(gòu)體,所以在尋找最寬基本類型成員時,應(yīng)當(dāng)包括復(fù)合類型成員的子成員,而不是把復(fù)合成員看成是一個整體。但在確定復(fù)合類型成員的偏移位置時則是將復(fù)合類型作為整體看待。

2)                   VC6例子

struct S3
{
char c1;
S1 s;
char c2
};

S1的最寬簡單成員的類型為int,S3在考慮最寬簡單類型成員時是將S1“打散”看的,所以S3的最寬簡單類型為int,這樣,通過S3定義的變量,其存儲空間首地址需要被4整除,整個sizeof(S3)的值也應(yīng)該被4整除。

c1 的偏移量為0,s的偏移量呢?這時s是一個整體,它作為結(jié)構(gòu)體變量也滿足前面三個準(zhǔn)則,所以其大小為8,偏移量為4,c1與s之間便需要3個填充字節(jié),而 c2與s之間就不需要了,所以c2的偏移量為12,算上c2的大小為13,13是不能被4整除的,這樣末尾還得補上3個填充字節(jié)。最后得到 sizeof(S3)的值為16。

通過上面的敘述,我們可以得到一個公式:結(jié)構(gòu)體的大小等于最后一個成員的偏移量加上其大小再加上末尾的填充字節(jié)數(shù)目,即:
sizeof( struct ) = offsetof( last item ) + sizeof( last item ) + sizeof( trailing padding )

編譯器的pack 指令用來調(diào)整結(jié)構(gòu)體對齊方式的,不同編譯器名稱和用法略有不同,VC6中通過#pragma pack實現(xiàn),也可以直接修改/Zp編譯開關(guān)。#pragma pack的基本用法為:#pragma pack( n ),n為字節(jié)對齊數(shù),其取值為1、2、4、8、16,默認是8,如果這個值比結(jié)構(gòu)體成員的sizeof值小,那么該成員的偏移量應(yīng)該以此值為準(zhǔn),即是說,結(jié)構(gòu)體成員的偏移量應(yīng)該取二者的最小值,公式如下:

offsetof( item ) = min( n, sizeof( item ) )

再看示例

#pragma pack(push) // 將當(dāng)前pack設(shè)置壓棧保存
#pragma pack(2)// 必須在結(jié)構(gòu)體定義之前使用
struct S1
{
char c;
int i;
};
struct S3
{
char c1;
S1 s;
char c2
};

#pragma pack(pop) // 恢復(fù)先前的pack設(shè)置

計算sizeof(S1) 時,min(2, sizeof(i))的值為2,所以i的偏移量為2,加上sizeof(i)等于6,能夠被2整除,所以整個S1的大小為6。同樣,對于 sizeof(S3),s的偏移量為2,c2的偏移量為8,加上sizeof(c2)等于9,不能被2整除,添加一個填充字節(jié),所以sizeof(S3) 等于10。“空結(jié)構(gòu)體”(不含數(shù)據(jù)成員)的大小不為0,而是1。試想一個“不占空間”的變量如何被取地址、兩個不同的“空結(jié)構(gòu)體”變量又如何得以區(qū)分呢?于是,“空結(jié)構(gòu)體”變量也得被存儲,這樣編譯器也就只能為其分配一個字節(jié)的空間用于占位了。

posted on 2009-03-27 10:39 chatler 閱讀(567) 評論(0)  編輯 收藏 引用 所屬分類: C++_BASIS
<2025年10月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

常用鏈接

留言簿(10)

隨筆分類(307)

隨筆檔案(297)

algorithm

Books_Free_Online

C++

database

Linux

Linux shell

linux socket

misce

  • cloudward
  • 感覺這個博客還是不錯,雖然做的東西和我不大相關(guān),覺得看看還是有好處的

network

OSS

  • Google Android
  • Android is a software stack for mobile devices that includes an operating system, middleware and key applications. This early look at the Android SDK provides the tools and APIs necessary to begin developing applications on the Android platform using the Java programming language.
  • os161 file list

overall

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            伊人婷婷久久| 欧美影院精品一区| 欧美精品二区| 午夜影院日韩| 久久精品国产视频| 日韩视频免费在线观看| 99国产一区二区三精品乱码| 国产精品久久久久久久久婷婷| 欧美一级理论片| 男女精品网站| 欧美在线播放一区| 欧美日韩国产丝袜另类| 欧美一区二区视频在线观看2020 | 亚洲欧美日韩一区在线| 亚洲高清网站| 久久久噜噜噜久久中文字免| 99热在线精品观看| 免费看精品久久片| 欧美va亚洲va香蕉在线| 国产亚洲欧洲| 久久爱www久久做| 欧美一区二区三区四区高清| 欧美视频在线观看一区| 亚洲国内在线| 在线播放国产一区中文字幕剧情欧美 | 亚洲一级高清| 国产精品看片资源| 篠田优中文在线播放第一区| 亚洲一区二区三区影院| 国产精品高精视频免费| 亚洲欧美日韩天堂| 久久精品72免费观看| 国产欧美丝祙| 久久综合免费视频影院| 亚洲国产美女| 欧美一区二区三区视频免费播放 | 模特精品裸拍一区| 亚洲人成欧美中文字幕| 午夜精品成人在线视频| 狠狠色综合色区| 欧美日韩视频在线观看一区二区三区| 欧美大胆人体视频| 亚洲综合国产精品| 在线观看福利一区| 国产精品白丝黑袜喷水久久久| 亚洲综合日韩中文字幕v在线| 亚洲第一中文字幕| 国产精品高潮呻吟久久av黑人| 欧美一级在线亚洲天堂| 亚洲人成啪啪网站| 久久一区亚洲| 亚欧成人在线| 亚洲欧美在线另类| 一二三区精品福利视频| 在线观看日韩欧美| 国产一区二区精品久久91| 欧美日本在线观看| 欧美激情日韩| 欧美福利影院| 欧美理论电影网| 欧美成人午夜77777| 久久久久久91香蕉国产| 久久精品人人| 久久久久久亚洲精品杨幂换脸 | 亚洲国产精品尤物yw在线观看| 久久九九免费| 免费成人毛片| 欧美国产国产综合| 欧美激情1区2区3区| 欧美99久久| 亚洲国产精品久久久久秋霞不卡| 亚洲第一二三四五区| 欧美成人免费播放| 亚洲免费成人| 亚洲欧美制服另类日韩| 玖玖玖国产精品| 欧美日韩一区二区欧美激情 | 欧美一区二区三区免费视频| 午夜精品久久99蜜桃的功能介绍| 亚洲欧美视频在线观看| 欧美一区二区三区日韩| 欧美一区二区免费| 欧美精品七区| 国产日本欧美一区二区三区在线| 欧美在线观看网址综合| 久久艳片www.17c.com| 国产精品久久国产愉拍| 极品日韩av| 欧美在线观看一二区| 欧美激情一区二区| 午夜精品免费| 国产精品美女一区二区| 在线精品国产成人综合| 亚洲欧美在线另类| 亚洲精品一区二区三区99| 亚洲欧美日韩国产精品| 欧美日韩国产成人在线| 亚洲成人在线观看视频| 欧美一区二区在线免费观看| 亚洲美女精品一区| 久久中文在线| 最新日韩在线视频| 欧美成人中文字幕| 欧美成人xxx| 日韩视频免费观看| 亚洲美女视频网| 欧美福利精品| 亚洲天堂男人| 亚洲欧美色婷婷| 国产亚洲在线观看| 欧美激情视频网站| 欧美国产视频在线观看| 中国亚洲黄色| 性欧美长视频| 91久久精品美女高潮| 亚洲精品日本| 国产日韩欧美高清免费| 久久久中精品2020中文| 欧美+亚洲+精品+三区| 亚洲免费中文字幕| 毛片一区二区三区| 欧美一区1区三区3区公司| 久久久噜噜噜久久久| 亚洲在线免费| 麻豆精品传媒视频| 亚洲专区一区二区三区| 狂野欧美激情性xxxx| 欧美在线视频一区二区| 欧美日韩视频在线一区二区观看视频 | 欧美激情一区二区三区在线视频观看| 亚洲日韩中文字幕在线播放| 9色porny自拍视频一区二区| 国产亚洲精品激情久久| 亚洲精品午夜精品| 亚洲国产精品成人精品| 久久国产精品久久精品国产| 亚洲欧美日韩国产| 欧美精品v日韩精品v韩国精品v| 久久久精彩视频| 国产精品一区久久久| 夜夜嗨av一区二区三区网站四季av| 在线观看日韩av电影| 久久综合久久综合这里只有精品 | 亚洲午夜在线观看| 欧美日韩理论| 在线视频亚洲一区| 亚洲在线视频网站| 国产嫩草一区二区三区在线观看| 亚洲小少妇裸体bbw| 亚洲视频免费| 国产乱码精品一区二区三区av| 一区二区欧美精品| 久久免费精品日本久久中文字幕| 国产区精品视频| 狂野欧美一区| av72成人在线| 久久伊伊香蕉| 亚洲无玛一区| 国产一区欧美| 欧美日韩网址| 欧美在线亚洲一区| 99国产精品| 美女主播精品视频一二三四| 一个色综合导航| 韩国女主播一区| 欧美日韩免费精品| 麻豆成人精品| 欧美亚洲视频在线观看| 亚洲伦理久久| 亚洲国产精品久久91精品| 久久久97精品| 欧美一区二区三区视频免费播放 | 老妇喷水一区二区三区| 一本色道久久综合亚洲精品不 | 欧美一级理论性理论a| 最新亚洲一区| 亚洲激情午夜| 一区久久精品| 激情小说亚洲一区| 国产区精品在线观看| 国产精品一二三四| 国产精品日本| 韩国精品久久久999| 韩国一区二区在线观看| 精品二区视频| 亚洲国产99| 亚洲理伦电影| 亚洲一区二区黄色| 久久电影一区| 久久欧美中文字幕| 亚洲第一中文字幕| 亚洲乱码国产乱码精品精天堂 | 久久久久久久成人| 免费看精品久久片| 亚洲精品欧美一区二区三区| 日韩手机在线导航| 久久久国产午夜精品| 欧美风情在线观看| 国产一区二区三区高清在线观看| 国产日韩欧美一区|