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

山寨:不是最好的,是最適合我們的!歡迎體驗(yàn)山寨 中文版MSDN

Blog @ Blog

當(dāng)華美的葉片落盡,生命的脈絡(luò)才歷歷可見。 -- 聶魯達(dá)

常用鏈接

統(tǒng)計(jì)

積分與排名

BBS

Blog

Web

最新評(píng)論

C++中的尺寸[轉(zhuǎn)]

轉(zhuǎn)自:http://blog.csdn.net/arong1234/archive/2008/03/23/2210462.aspx

1. sizeof:返回類型的尺寸

 每個(gè)類型在編譯時(shí)都會(huì)決定自己的實(shí)例需要多少字節(jié)。在編譯后,該類型的所有對(duì)象占有的空間是一樣的,不會(huì)發(fā)生變化。因此,我們可以用sizeof來計(jì)算一個(gè)類型或者該類型的某個(gè)實(shí)例來得到尺寸信息。下面的代碼是等價(jià)的


int iVal;
//sizeof type
sizeof(int)
//sizeof instance
sizeof(iVal)

無論我們用iVal還是int,上面的表達(dá)式都會(huì)返回int類型的尺寸(當(dāng)然如前所說,iVal的尺寸和其類型尺寸永遠(yuǎn)是一樣的)。

不熟悉sizeof的朋友往往會(huì)在處理指針時(shí)弄錯(cuò)概念。考慮下面代碼:

int iArray[10];
int sizeofArray=sizeof(iArray);

int * p= new int[10];
int sizeofPointer = sizeof(p);

在很多人心目中,指針和數(shù)組是等價(jià)的,但是事實(shí)嚴(yán)格起來并不如此。上面的代碼就會(huì)返回不同的結(jié)果。

對(duì)于iArray,它的類型是int[10],是一個(gè)數(shù)組,sizeof計(jì)算其尺寸時(shí),知道它包含10個(gè)元素,每個(gè)元素都時(shí)個(gè)整型,因此返回40。而對(duì)于p,它的類型是int*,指針的尺寸永遠(yuǎn)是4,因此結(jié)果就是4。sizeof不會(huì)也不可能知道p實(shí)際指向10個(gè)元素的數(shù)組。

出現(xiàn)這個(gè)問題的原因有兩個(gè):1. sizeof是在編譯時(shí)計(jì)算的,而new int[10]指向的數(shù)組是在運(yùn)行時(shí)創(chuàng)建的,也就是說當(dāng)sizeof(p)計(jì)算時(shí),系統(tǒng)還不知道p會(huì)指向多少個(gè)int元素,自然也不可能知道它指向的數(shù)組占有多少字節(jié)。2. sizeof計(jì)算的是p自己的類型所占據(jù)的空間,而不是p指向的對(duì)象所占據(jù)的空間,可以說,p自己占據(jù)4個(gè)字節(jié),而p指向的空間占40字節(jié)。

在這種概念下,我們是不是可以通過sizeof(*p)來得到40呢?很不幸,不行,原因是p的類型是int*,*p的類型是int,因此無法得到其是一個(gè)數(shù)組的事實(shí)。

實(shí)際上,這個(gè)尺寸信息是個(gè)運(yùn)行時(shí)數(shù)據(jù),作為C/C++語言而言,是無從知道這個(gè)信息的(因?yàn)镃/C++指針不包含這種信息),要得到它,唯一的辦法是指望操作系統(tǒng)在運(yùn)行時(shí)中提供。在VC中,我們可以通過_msize得到。

2. 對(duì)齊問題

我們?cè)谠L問內(nèi)存時(shí),如果地址是按4字節(jié)對(duì)齊,則訪問效率會(huì)高很多。這個(gè)問題的原因在于訪問內(nèi)存的硬件電路。一般情況下,地址總線總是按照對(duì)齊后的地址來訪問。例如你想得到0x00000001開始的4字節(jié)內(nèi)容,系統(tǒng)首先需要以0x00000000讀4字節(jié),然后從中取得3字節(jié),然后在用0x00000004作為開始地址,獲得下一個(gè)四字節(jié),在從中得到第一個(gè)字節(jié),兩次組合出你想得到的內(nèi)容。但是如果地址一開始就是對(duì)齊到0x00000000,則系統(tǒng)只要一次讀寫即可。

為了性能考慮,編譯器會(huì)對(duì)結(jié)構(gòu)進(jìn)行對(duì)齊處理。考慮下面的結(jié)構(gòu)

 

struct aStruct
{
               
char cValue;
               
int    iValue;
}
;

 

直觀的講,這個(gè)結(jié)構(gòu)的尺寸是sizeof(char)+sizeof(int)=5,但是在實(shí)際編譯下,這個(gè)結(jié)構(gòu)尺寸缺省是8,因?yàn)榈诙€(gè)域ivalue會(huì)被對(duì)齊到第四個(gè)字節(jié)。

在VC中,我們可以用pack預(yù)處理指令來禁止對(duì)齊調(diào)整。例如,下面代碼將使得結(jié)構(gòu)尺寸更加緊湊,不會(huì)出現(xiàn)對(duì)齊到4字節(jié)問題:

 

#pragma pack(1)
struct aStruct{
     
char cValue;
    
int     iValue;
}
;
#pragma pack()

對(duì)于這個(gè)pack指令的含義,大家可以查詢MSDN。請(qǐng)注意:除非你覺得必須這樣,不要輕易做這樣的調(diào)整,因?yàn)檫@將降低程序性能。目前比較常見的用法是:1. 這個(gè)結(jié)構(gòu)需要被直接寫入文件 2. 這個(gè)結(jié)構(gòu)需要通過網(wǎng)絡(luò)傳給其他程序。

注意:字節(jié)對(duì)齊是編譯時(shí)決定的,一旦決定不會(huì)再改變,因此即使有對(duì)齊的因素在,也不會(huì)出現(xiàn)一個(gè)結(jié)構(gòu)在運(yùn)行時(shí)尺寸發(fā)生變化的情況出現(xiàn)。

posted on 2008-05-25 21:53 isabc 閱讀(392) 評(píng)論(0)  編輯 收藏 引用 所屬分類: C++基礎(chǔ)

廣告信息(免費(fèi)廣告聯(lián)系)

中文版MSDN:
歡迎體驗(yàn)

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            午夜国产精品影院在线观看| 久久久亚洲综合| 韩国精品在线观看| 新片速递亚洲合集欧美合集| 免费不卡在线视频| 亚洲激情在线播放| 国产精品呻吟| 欧美aa国产视频| 午夜视频在线观看一区| 亚洲高清中文字幕| 欧美一区二区私人影院日本| 国产亚洲欧洲997久久综合| 欧美福利视频| 久久男女视频| 久久久久久久网| 午夜欧美视频| 亚洲欧美一区二区三区极速播放| 亚洲美女av网站| 亚洲精品国产视频| 亚洲国产婷婷香蕉久久久久久99| 麻豆精品视频在线| 毛片基地黄久久久久久天堂| 久久久久九九九| 久久理论片午夜琪琪电影网| 欧美一区二区免费| 欧美中文在线免费| 欧美影院在线播放| 久久成人免费| 久久国产欧美日韩精品| 欧美亚洲在线| 久久精品欧美| 麻豆国产精品777777在线| 麻豆精品精品国产自在97香蕉| 久久精品理论片| 久久人人爽国产| 另类酷文…触手系列精品集v1小说| 久久九九久精品国产免费直播| 久久精品亚洲精品国产欧美kt∨| 欧美一区日韩一区| 久久精品视频免费播放| 久久亚洲色图| 欧美大片免费久久精品三p| 亚洲第一精品影视| 亚洲人成网站999久久久综合| 亚洲精品在线视频观看| 亚洲精品在线免费| 亚洲图片你懂的| 欧美在线观看一二区| 欧美在线精品一区| 久久综合网hezyo| 欧美a级片网站| 欧美久久久久免费| 欧美亚州韩日在线看免费版国语版| 国产精品99免费看 | 日韩视频在线播放| 中文亚洲欧美| 久久er99精品| 免费在线欧美视频| 欧美午夜精品久久久久久孕妇| 国产精品丝袜久久久久久app| 国产农村妇女精品一区二区 | 日韩午夜一区| 亚洲一区二区三区四区视频| 久久av红桃一区二区小说| 久久久久久色| 亚洲人成人99网站| 亚洲一区制服诱惑| 久久亚洲视频| 欧美视频在线观看一区二区| 国产日产欧美a一级在线| 亚洲二区免费| 亚洲欧美福利一区二区| 久久久99爱| 亚洲国产欧洲综合997久久| 亚洲天堂av在线免费| 久久久噜噜噜久久| 欧美日韩精品福利| 精品不卡一区| 这里只有精品丝袜| 久久亚洲二区| 一区二区欧美国产| 久久中文字幕一区| 欧美日韩在线精品一区二区三区| 国精产品99永久一区一区| 亚洲美女中出| 久久亚洲欧洲| 亚洲一区二区影院| 男同欧美伦乱| 国产一区二区三区精品欧美日韩一区二区三区 | 亚洲欧美成人| 欧美激情欧美激情在线五月| 亚洲作爱视频| 欧美成人午夜激情在线| 国产精品一二一区| 亚洲精品一品区二品区三品区| 欧美专区中文字幕| 999亚洲国产精| 牛夜精品久久久久久久99黑人| 国产精品午夜电影| 中文在线资源观看网站视频免费不卡| 老鸭窝亚洲一区二区三区| 亚洲无毛电影| 欧美日韩亚洲成人| 亚洲国产小视频在线观看| 久久精品99国产精品日本| 一区二区国产精品| 欧美—级高清免费播放| 国内视频一区| 欧美在线999| 国产精品99久久久久久久久| 欧美极品在线观看| 亚洲国产欧美日韩| 久久永久免费| 欧美一区免费| 国产一区二区电影在线观看| 亚洲自拍偷拍福利| 99国产精品久久久久老师| 欧美精品福利视频| 亚洲欧洲另类国产综合| 你懂的一区二区| 久久久噜噜噜久久人人看| 国产一区二区久久精品| 久久riav二区三区| 午夜免费在线观看精品视频| 国产精品视频yy9099| 亚洲一区二区不卡免费| 日韩视频在线观看免费| 欧美猛交免费看| 一本久道久久综合狠狠爱| 亚洲日本一区二区| 欧美美女操人视频| 亚洲最新视频在线播放| 亚洲区在线播放| 欧美午夜视频在线| 午夜视频在线观看一区二区三区| 亚洲午夜高清视频| 国产一区二区欧美日韩| 久久综合给合| 免费成年人欧美视频| 99热在这里有精品免费| 一本色道久久综合精品竹菊 | 伊人久久大香线蕉av超碰演员| 久久精品国产亚洲精品 | 一本不卡影院| 夜夜爽av福利精品导航 | 日韩亚洲欧美在线观看| 亚洲精选成人| 国产精品美女主播| 久久久免费精品视频| 美女成人午夜| 中国成人在线视频| 午夜精品一区二区三区在线视 | 久久精品一区二区三区四区| 在线精品国产成人综合| 亚洲高清色综合| 欧美午夜视频在线观看| 久久久久女教师免费一区| 久久婷婷av| 亚洲午夜久久久久久久久电影院| 亚洲免费在线看| 亚洲第一毛片| av不卡在线| 红桃av永久久久| 亚洲精品欧美在线| 国产日韩在线一区二区三区| 美女精品一区| 欧美网站在线| 欧美α欧美αv大片| 欧美日韩午夜在线| 久久亚裔精品欧美| 欧美三级乱码| 麻豆国产va免费精品高清在线| 欧美国产日韩视频| 欧美一级欧美一级在线播放| 看片网站欧美日韩| 午夜一级久久| 欧美福利网址| 久久人人爽爽爽人久久久| 欧美激情1区2区3区| 欧美中文字幕| 欧美日本一道本| 久久夜色精品国产欧美乱极品| 欧美精品系列| 久久综合伊人77777尤物| 欧美色欧美亚洲另类二区| 久久深夜福利免费观看| 欧美日韩视频一区二区| 欧美/亚洲一区| 国产欧美精品一区二区色综合| 亚洲国产综合在线看不卡| 国产一区二区三区直播精品电影| 亚洲人成啪啪网站| 在线播放中文一区| 性欧美video另类hd性玩具| 夜夜嗨av一区二区三区网页| 久久久久久久一区| 欧美亚洲一级| 欧美日韩人人澡狠狠躁视频| 欧美成人激情视频免费观看| 国产精品五区|