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

posts - 297,  comments - 15,  trackbacks - 0

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

整理自http://m.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>
            亚洲欧洲综合另类| 国产综合色精品一区二区三区| 亚洲国产一区在线| 国产精品久久久久久久久免费樱桃 | 亚洲日本欧美| 一本大道av伊人久久综合| 日韩亚洲欧美精品| 亚洲在线观看免费| 欧美在线国产| 欧美成人国产一区二区| 精品999成人| 美日韩精品视频免费看| 韩国三级电影久久久久久| 国产精品久久久久秋霞鲁丝| 欧美三级午夜理伦三级中视频| 欧美激情一二区| 欧美日本在线看| 欧美日韩www| 国产精品亚洲综合一区在线观看| 国产偷自视频区视频一区二区| 国内精品久久久久久| 亚洲黄色小视频| 亚洲欧美日韩久久精品 | 亚洲免费av网站| 中日韩美女免费视频网址在线观看| 99亚洲一区二区| 欧美呦呦网站| 欧美午夜视频网站| 在线视频国产日韩| 亚洲精品国产精品国产自| 亚洲欧美中文日韩在线| 免费中文字幕日韩欧美| 日韩午夜在线播放| 久久国产精品毛片| 国产精品久久久久久一区二区三区 | 免费精品99久久国产综合精品| 欧美日韩国产一区二区三区地区| 国产日韩欧美电影在线观看| 日韩午夜电影在线观看| 久久精品亚洲国产奇米99| 国产日韩欧美视频在线| 亚洲狼人综合| 欧美v日韩v国产v| 亚洲欧美一区二区视频| 欧美日韩一区二区三区视频| 精品999在线观看| 欧美在线免费视频| 一区二区三区国产在线观看| 久久欧美中文字幕| 国产一区二区三区四区| 午夜在线a亚洲v天堂网2018| 日韩视频不卡| 欧美精品97| 亚洲高清视频在线观看| 久久国产免费| 亚洲女女女同性video| 国产精品视频精品| 亚洲欧美精品在线观看| 妖精成人www高清在线观看| 在线一区二区三区做爰视频网站 | 牛牛国产精品| 在线观看欧美成人| 欧美91大片| 久久久久久伊人| 精品1区2区| 欧美成人免费在线观看| 六月婷婷一区| 日韩视频免费观看高清在线视频| 亚洲高清av| 欧美激情第三页| av不卡在线观看| 99国产精品私拍| 国产精品婷婷| 久久电影一区| 久久久久久伊人| 亚洲乱码日产精品bd| 欧美激情按摩在线| 欧美日本韩国| 久久gogo国模啪啪人体图| 久久精品国产999大香线蕉| 黑人一区二区三区四区五区| 嫩草影视亚洲| 欧美男人的天堂| 欧美一级欧美一级在线播放| 久久成人资源| 免播放器亚洲一区| 日韩视频精品在线| 亚洲一区在线播放| 亚洲大片一区二区三区| 99精品免费| 狠狠色综合播放一区二区| 亚洲国产精品成人综合| 国产精品久久9| 免费国产自线拍一欧美视频| 欧美日韩国产一中文字不卡| 欧美在线一区二区三区| 欧美本精品男人aⅴ天堂| 小黄鸭精品aⅴ导航网站入口| 久久精品欧美日韩精品| 亚洲无限乱码一二三四麻| 久久蜜桃资源一区二区老牛 | 欧美一区二区在线免费播放| 久久精品91久久香蕉加勒比| 亚洲精选视频在线| 欧美中文字幕| 亚洲综合色激情五月| 美女久久网站| 久久久久国产一区二区三区| 欧美日产国产成人免费图片| 久久天天躁夜夜躁狠狠躁2022| 欧美日韩精品国产| 欧美黄色视屏| 国产日本欧洲亚洲| 99在线热播精品免费| 最新中文字幕亚洲| 日韩午夜在线播放| 一本色道久久综合| 国产欧美一区二区三区国产幕精品| 亚洲高清二区| 一区二区三区在线观看国产| 亚洲一区二区三区免费视频| 亚洲精品免费一二三区| 久久久久一区| 久久久久国产一区二区| 国产精品久久久久久久9999 | 欧美国产精品人人做人人爱| 黑丝一区二区三区| 欧美一区二区三区免费视| 亚洲欧美另类久久久精品2019| 欧美国产精品人人做人人爱| 久久夜色精品| 狠狠色2019综合网| 欧美在线视频一区| 久久高清福利视频| 欧美性开放视频| 亚洲精品视频免费| 久久中文欧美| 欧美成人免费在线| 亚洲精品在线二区| 欧美激情小视频| 亚洲欧洲一区二区三区在线观看| 亚洲高清资源综合久久精品| 久久资源av| 欧美激情亚洲激情| 亚洲精品国产精品久久清纯直播| 麻豆国产精品777777在线 | 麻豆精品精华液| 一区二区三区在线视频播放| 久久国产日本精品| 亚洲国产成人精品女人久久久 | 91久久中文| 亚洲一二三区在线| 国产精品久久久久久福利一牛影视 | 欧美日韩精品久久| 一区二区三区|亚洲午夜| 亚洲网站视频| 国产欧美日韩精品在线| 午夜在线视频观看日韩17c| 久久亚洲视频| 亚洲毛片在线观看| 国产精品日本一区二区| 欧美在线观看视频一区二区| 欧美成人精精品一区二区频| 亚洲免费大片| 国产欧美日韩一区二区三区在线| 久久大香伊蕉在人线观看热2| 欧美大片在线观看| 亚洲视频在线二区| 国产亚洲免费的视频看| 免费观看成人网| 亚洲午夜电影网| 欧美国产日韩精品| 亚洲欧美日韩国产| 久久影音先锋| 久久久精品网| 今天的高清视频免费播放成人 | 在线精品国精品国产尤物884a| 久久婷婷麻豆| 中国女人久久久| 欧美aaaaaaaa牛牛影院| 欧美1区免费| 亚洲一区综合| 亚洲欧洲一区二区在线播放| 欧美影片第一页| 99xxxx成人网| 亚洲丁香婷深爱综合| 国产精品青草久久| 欧美成人自拍视频| 久久成人免费视频| 亚洲主播在线| 99re6这里只有精品| 欧美国产日韩精品| 久久先锋影音av| 欧美一级视频一区二区| 一区二区高清在线观看| 亚洲国产欧美一区二区三区同亚洲| 国产欧美日韩亚洲精品| 欧美午夜理伦三级在线观看| 欧美激情综合五月色丁香| 久久一区视频|