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

posts - 297,  comments - 15,  trackbacks - 0

C++----字節對齊方式

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

字節對齊的細節和編譯器實現相關,但一般而言,滿足三個準則:

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

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

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

對于上面的準則,有幾點需要說明:

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

2)                   VC6例子

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

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

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

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

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

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

再看示例

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

#pragma pack(pop) // 恢復先前的pack設置

計算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整除,添加一個填充字節,所以sizeof(S3) 等于10。“空結構體”(不含數據成員)的大小不為0,而是1。試想一個“不占空間”的變量如何被取地址、兩個不同的“空結構體”變量又如何得以區分呢?于是,“空結構體”變量也得被存儲,這樣編譯器也就只能為其分配一個字節的空間用于占位了。

posted on 2009-03-27 10:39 chatler 閱讀(570) 評論(0)  編輯 收藏 引用 所屬分類: C++_BASIS
<2009年2月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
1234567

常用鏈接

留言簿(10)

隨筆分類(307)

隨筆檔案(297)

algorithm

Books_Free_Online

C++

database

Linux

Linux shell

linux socket

misce

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

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>
            欧美日韩一区二区在线视频| 亚洲在线观看免费视频| 宅男噜噜噜66一区二区| 亚洲高清久久| 久久都是精品| 午夜一区二区三区在线观看| 欧美日韩p片| 亚洲电影欧美电影有声小说| 国产亚洲一区二区三区在线播放| 日韩视频国产视频| 亚洲免费观看| 欧美激情久久久久| 欧美激情在线| 亚洲国产精品va在看黑人| 欧美一区二区三区四区视频| 欧美在线日韩| 国产日韩欧美自拍| 亚洲女同精品视频| 欧美一区二区日韩一区二区| 国产精品视频免费在线观看| 一区二区三区精密机械公司 | 国产精品久久久久久久app| 亚洲黄色成人| 一本色道久久综合狠狠躁的推荐| 免费亚洲网站| 亚洲精品一区二区三区av| 亚洲精品日本| 欧美精品一区二区高清在线观看| 亚洲精品久久久久| 亚洲视频在线一区| 国产精品网站在线播放| 亚洲欧美日韩综合国产aⅴ| 欧美在线播放一区二区| 国产一区二区视频在线观看 | 久热精品视频在线观看| 久久综合亚州| 亚洲区国产区| 欧美日韩高清在线播放| 亚洲夜晚福利在线观看| 久久精品视频在线看| 在线成人av| 欧美美女日韩| 香蕉尹人综合在线观看| 久久伊人一区二区| 亚洲伦理中文字幕| 国产精品盗摄久久久| 欧美在线观看一区二区| 欧美国产91| 亚洲免费在线| 红桃视频国产一区| 欧美黄色一区| 午夜久久久久久久久久一区二区| 麻豆精品视频| 亚洲视频每日更新| 国语自产精品视频在线看抢先版结局 | 欧美一区二区免费视频| 欧美成人精品一区二区| 亚洲校园激情| 激情综合色综合久久| 欧美女同在线视频| 欧美一区二区在线观看| 亚洲激情电影在线| 欧美在线观看视频一区二区三区 | 裸体一区二区三区| 一区二区国产精品| 黄色在线成人| 国产精品久久久久毛片软件| 久久男人资源视频| 亚洲一区免费看| 亚洲国产精品久久人人爱蜜臀| 午夜日韩电影| 亚洲日韩第九十九页| 国产午夜精品福利| 欧美性片在线观看| 久久综合色一综合色88| 亚洲女与黑人做爰| 日韩网站在线| 亚洲国产精品va在线看黑人| 久久国产一区二区| 亚洲一区二区三区国产| 亚洲激情网址| 伊人精品成人久久综合软件| 国产精品自拍一区| 欧美体内she精视频| 欧美成年人视频| 久久久av毛片精品| 欧美一级大片在线观看| 一本到高清视频免费精品| 欧美激情小视频| 欧美1区视频| 久久在精品线影院精品国产| 欧美一区二区在线看| 亚洲午夜av电影| av成人免费在线| 亚洲美女免费视频| 亚洲精品国产拍免费91在线| 在线观看国产一区二区| 好看的亚洲午夜视频在线| 国产欧美一区二区三区另类精品| 欧美手机在线| 欧美色偷偷大香| 欧美午夜精品久久久久久超碰| 欧美精品电影| 欧美日产国产成人免费图片| 欧美激情综合五月色丁香小说 | 欧美日韩国产精品一卡| 蜜桃视频一区| 欧美激情视频网站| 欧美日本免费| 国产精品二区三区四区| 国产精品国产三级国产专区53| 欧美天堂亚洲电影院在线播放| 欧美日韩三级| 国产精品久久久久久影视| 国产精品日韩二区| 国产色综合天天综合网| 狠狠色狠狠色综合日日91app| 一区免费在线| 亚洲精品乱码久久久久久蜜桃91| 亚洲精品乱码久久久久久日本蜜臀| 日韩午夜精品| 亚洲欧美另类在线观看| 久久精品国产久精国产一老狼| 久久精品视频免费播放| 你懂的国产精品永久在线| 亚洲国产精品久久久| 亚洲精品欧美精品| 亚洲影视中文字幕| 久久精品99国产精品日本| 噜噜噜在线观看免费视频日韩| 欧美精品xxxxbbbb| 国产精品美女久久| 一区久久精品| 99精品欧美| 久久久久国产精品www| 欧美激情女人20p| 国产精品99久久不卡二区| 欧美中文在线字幕| 欧美日韩国内自拍| 国产一区二区三区不卡在线观看| 最新中文字幕一区二区三区| 亚洲欧美精品suv| 免费看的黄色欧美网站| 一本高清dvd不卡在线观看| 欧美一区视频在线| 欧美高清你懂得| 国产日韩欧美亚洲| 日韩视频在线免费观看| 久久国产精品久久久久久久久久 | 国产亚洲欧美另类中文| 亚洲欧洲日产国产网站| 亚洲欧美日韩国产综合精品二区 | 久久一综合视频| a91a精品视频在线观看| 久久久久久电影| 国产精品久久久久久久一区探花| 亚洲福利国产| 久久久不卡网国产精品一区| 亚洲人成亚洲人成在线观看| 久久精品夜色噜噜亚洲a∨| 欧美三级电影一区| 亚洲日本中文字幕免费在线不卡| 久久国产99| 亚洲一区999| 欧美日韩视频专区在线播放| 在线观看久久av| 久久久激情视频| 亚洲综合大片69999| 欧美日韩精品一区二区在线播放 | 在线免费观看成人网| 欧美亚洲综合网| 在线视频你懂得一区| 欧美精品一区二区三区很污很色的| 永久久久久久| 久久色中文字幕| 欧美综合国产| 国产一区二区在线观看免费| 欧美一区二区成人6969| 在线亚洲欧美| 欧美日韩精品是欧美日韩精品| 亚洲品质自拍| 亚洲国产免费看| 美女视频黄a大片欧美| 在线观看欧美精品| 免费亚洲一区| 久久先锋影音| 亚洲国产精品女人久久久| 免费人成精品欧美精品| 久久影视精品| 亚洲国产精品成人综合色在线婷婷| 久久久美女艺术照精彩视频福利播放 | 欧美国产丝袜视频| 乱中年女人伦av一区二区| 亚洲高清在线观看| 欧美成人免费小视频| 欧美69wwwcom| 在线一区欧美| 亚洲午夜一区二区| 国产农村妇女毛片精品久久麻豆 | 国产在线精品二区|