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

posts - 297,  comments - 15,  trackbacks - 0

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

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

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

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

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

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

對(duì)于上面的準(zhǔn)則,有幾點(diǎn)需要說(shuō)明:

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

2)                   VC6例子

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

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

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

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

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

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

posted on 2009-03-27 10:39 chatler 閱讀(569) 評(píng)論(0)  編輯 收藏 引用 所屬分類: C++_BASIS
<2010年2月>
31123456
78910111213
14151617181920
21222324252627
28123456
78910111213

常用鏈接

留言簿(10)

隨筆分類(307)

隨筆檔案(297)

algorithm

Books_Free_Online

C++

database

Linux

Linux shell

linux socket

misce

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

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

搜索

  •  

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美综合77777色婷婷| 黄色日韩在线| 欧美在线不卡视频| 午夜精品一区二区三区电影天堂| 一本色道久久综合亚洲精品不卡| 亚洲人午夜精品免费| 欧美激情免费观看| 亚洲精品看片| 亚洲一区二区免费在线| 午夜影院日韩| 另类国产ts人妖高潮视频| 久久精品日韩一区二区三区| 亚洲高清一二三区| 亚洲国产你懂的| 亚洲精品1区2区| 亚洲国产精品一区二区www| 欧美国产1区2区| 欧美激情精品久久久久久| 麻豆精品视频在线观看| 欧美在线观看视频| 欧美一区二区三区免费观看| 亚洲欧美三级在线| 久久er精品视频| 麻豆精品在线视频| 亚洲国产成人91精品| 亚洲精品乱码久久久久| 一区二区三区视频在线播放| 亚洲一区二区精品在线| 久久五月婷婷丁香社区| 国产精品久久久久久久久免费樱桃| 黑人操亚洲美女惩罚| 亚洲宅男天堂在线观看无病毒| 久久久99国产精品免费| 亚洲美女性视频| 噜噜爱69成人精品| 国产午夜亚洲精品理论片色戒| 日韩亚洲欧美中文三级| 久久免费精品视频| 亚洲在线视频网站| 欧美日韩国语| 亚洲精品一二三区| 欧美国产视频在线| 久久久噜噜噜久久久| 国产欧美精品久久| 亚洲欧美日韩直播| 一本久久青青| 欧美午夜宅男影院在线观看| 日韩亚洲视频在线| 亚洲欧洲综合另类| 欧美va亚洲va国产综合| 亚洲电影在线| 蜜桃av久久久亚洲精品| 久久福利视频导航| 狠狠入ady亚洲精品| 午夜精品久久久| 亚洲女同性videos| 国产乱码精品一区二区三区av| 中文国产一区| 日韩午夜在线视频| 欧美精品18+| 日韩午夜精品视频| 亚洲免费成人av| 欧美日韩成人| 亚洲自拍偷拍色片视频| 亚洲女同精品视频| 韩日精品视频一区| 欧美成人国产va精品日本一级| 久久精品国产一区二区三区免费看| 国内视频精品| 麻豆精品视频在线观看视频| 久久九九久久九九| 亚洲国产综合视频在线观看| 欧美成人官网二区| 欧美激情视频在线播放 | 艳妇臀荡乳欲伦亚洲一区| 亚洲视频1区| 亚洲欧美在线播放| 国内精品久久久久久久影视麻豆| 久久久久青草大香线综合精品| 久久九九国产精品怡红院| 亚洲国产欧美日韩精品| 欧美成人情趣视频| 欧美精品日日鲁夜夜添| 亚洲免费视频成人| 欧美一区二区大片| 亚洲欧洲日本专区| 亚洲六月丁香色婷婷综合久久| 国产精品区一区二区三区| 久久噜噜亚洲综合| 欧美精品久久久久a| 亚洲免费一区二区| 久久综合九色综合欧美狠狠| 在线一区亚洲| 久久久成人精品| 亚洲专区国产精品| 久久久久五月天| 亚洲无线视频| 巨胸喷奶水www久久久免费动漫| 这里只有精品在线播放| 久久大香伊蕉在人线观看热2| 亚洲免费成人| 久久精品国产免费看久久精品| 一区二区电影免费在线观看| 欧美一区二区国产| 亚洲精品美女久久7777777| 亚洲欧美日韩在线播放| 亚洲美女视频在线免费观看| 久久精品女人的天堂av| 亚洲视频免费在线| 美国十次了思思久久精品导航| 亚洲欧美网站| 欧美电影在线播放| 久久青草久久| 国产精品久久二区二区| 最近中文字幕mv在线一区二区三区四区| 国产伦精品一区二区三区视频孕妇 | 亚洲国产成人午夜在线一区 | 在线精品视频免费观看 | 欧美日韩亚洲一区二区三区在线观看 | 国产主播喷水一区二区| 一区二区不卡在线视频 午夜欧美不卡在 | 国产亚洲成av人在线观看导航| 亚洲毛片视频| 亚洲人久久久| 久久久久久久欧美精品| 亚洲免费综合| 欧美视频一区二区在线观看| 欧美激情一区在线| 黄色成人在线观看| 欧美在线亚洲在线| 亚洲欧美日韩国产一区二区| 欧美成人网在线| 欧美激情精品久久久久久大尺度 | 亚洲自拍电影| 亚洲欧美日韩电影| 欧美日韩中文字幕日韩欧美| 亚洲福利国产精品| 亚洲国产精品传媒在线观看 | 在线欧美不卡| 久久婷婷人人澡人人喊人人爽| 久久精品国产综合精品| 国产亚洲综合在线| 亚洲综合视频网| 久久久国产视频91| 狠狠久久婷婷| 欧美福利一区二区| 日韩一级大片| 亚洲午夜精品久久久久久浪潮 | 欧美精品在线一区二区三区| 欧美黑人在线观看| 日韩视频在线观看免费| 欧美日韩久久久久久| 99riav久久精品riav| 午夜精品在线看| 国模私拍视频一区| 男人的天堂成人在线| 亚洲伦伦在线| 久久se精品一区二区| 亚洲第一成人在线| 欧美本精品男人aⅴ天堂| 亚洲精品欧美| 欧美影视一区| 精品不卡一区| 欧美日韩在线观看视频| 欧美在线三区| 亚洲精品国产系列| 性欧美长视频| 亚洲国产成人高清精品| 欧美日韩精品免费看| 午夜精品视频| 欧美韩国日本综合| 性做久久久久久久久| 亚洲第一福利视频| 国产精品久久久久久久久久ktv | 久久久久久久999| 亚洲黄色在线| 久久精品夜夜夜夜久久| 亚洲黄网站在线观看| 国产女主播一区二区| 国产精品一区三区| 亚洲一区在线播放| 欧美日韩播放| 午夜精品久久久久久久99热浪潮| 欧美在线视频日韩| 亚洲人成亚洲人成在线观看| 国产精品国内视频| 久久精品一本久久99精品| 欧美国产日韩一区二区| 午夜日韩av| 日韩亚洲成人av在线| 国产一区二区三区在线观看视频| 欧美高清hd18日本| 久久久www成人免费精品| 在线综合亚洲| 亚洲欧洲精品一区| 久久成人资源| 亚洲欧美偷拍卡通变态| 艳妇臀荡乳欲伦亚洲一区| 精品91视频| 国产精品一区三区|