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

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

Blog @ Blog

當(dāng)華美的葉片落盡,生命的脈絡(luò)才歷歷可見(jiàn)。 -- 聶魯達(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:返回類(lèi)型的尺寸

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


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

無(wú)論我們用iVal還是int,上面的表達(dá)式都會(huì)返回int類(lèi)型的尺寸(當(dāng)然如前所說(shuō),iVal的尺寸和其類(lèi)型尺寸永遠(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)格起來(lái)并不如此。上面的代碼就會(huì)返回不同的結(jié)果。

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

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

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

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

2. 對(duì)齊問(wèn)題

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

為了性能考慮,編譯器會(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ù)處理指令來(lái)禁止對(duì)齊調(diào)整。例如,下面代碼將使得結(jié)構(gòu)尺寸更加緊湊,不會(huì)出現(xiàn)對(duì)齊到4字節(jié)問(wèn)題:

 

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

對(duì)于這個(gè)pack指令的含義,大家可以查詢(xún)MSDN。請(qǐng)注意:除非你覺(jué)得必須這樣,不要輕易做這樣的調(diào)整,因?yàn)檫@將降低程序性能。目前比較常見(jiàn)的用法是:1. 這個(gè)結(jié)構(gòu)需要被直接寫(xiě)入文件 2. 這個(gè)結(jié)構(gòu)需要通過(guò)網(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 閱讀(385) 評(píng)論(0)  編輯 收藏 引用 所屬分類(lèi): 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>
            亚洲一本视频| 韩国自拍一区| 亚洲欧美日韩专区| 亚洲欧美日韩电影| 欧美在线视频一区| 久久综合精品国产一区二区三区| 久久亚洲春色中文字幕| 欧美成人午夜激情| 欧美午夜精品久久久久久浪潮| 国产精品v片在线观看不卡| 国产精品久久久久久五月尺| 国产日韩av一区二区| 韩国av一区| 亚洲欧洲在线一区| 亚洲视屏在线播放| 久久一区二区视频| 91久久久久久久久| 亚洲一级网站| 久久久国产精品亚洲一区 | 欧美日韩精品综合在线| 欧美精品v国产精品v日韩精品| 欧美日韩在线精品一区二区三区| 国产欧美一区二区三区另类精品| 亚洲国产天堂久久综合| 亚洲一区二区在线| 久久天天躁狠狠躁夜夜av| 亚洲日本va午夜在线电影| 亚洲免费一区二区| 欧美国产日本在线| 国产一区二区久久| 亚洲一区二区三区涩| 欧美国产综合一区二区| 欧美一区=区| 国产精品久久久久影院亚瑟| 亚洲国产裸拍裸体视频在线观看乱了| 欧美一区午夜视频在线观看| 日韩视频在线观看一区二区| 久久亚洲精品中文字幕冲田杏梨 | 欧美中文在线免费| 国产精品wwwwww| 日韩亚洲欧美综合| 久久在线免费观看| 亚洲欧美成人一区二区三区| 欧美日韩国产一中文字不卡| 尤物yw午夜国产精品视频明星| 亚洲永久免费| 亚洲精品久久久久久下一站| 久久视频在线看| 国产日韩精品一区二区三区| 一本色道久久综合亚洲91| 欧美国产日韩视频| 欧美gay视频激情| 亚洲国产精品一区在线观看不卡 | 久久综合伊人77777蜜臀| 亚洲影音一区| 国产欧美日韩亚洲一区二区三区| 亚洲在线观看免费| 亚洲在线成人| 国产亚洲美州欧州综合国| 欧美一区二区三区四区在线观看| 制服诱惑一区二区| 国产精品一卡二卡| 久久久精品国产免大香伊| 久久国产精品99久久久久久老狼| 激情自拍一区| 欧美成人情趣视频| 欧美大尺度在线观看| 一区二区三区免费网站| 亚洲视频第一页| 国产欧美精品日韩| 麻豆精品传媒视频| 欧美国产日本在线| 午夜精品久久久| 久久gogo国模裸体人体| 怡红院精品视频在线观看极品| 免费一级欧美片在线观看| 最新亚洲一区| 欧美日韩国产美女| 亚洲视频图片小说| 亚洲一区在线观看视频 | 欧美成人午夜激情视频| 你懂的视频一区二区| 日韩一区二区久久| 亚洲一级免费视频| 亚洲成色777777女色窝| 亚洲欧洲午夜| 国产精品婷婷| 欧美激情亚洲| 国产精品毛片| 欧美岛国在线观看| 国产精品视频一二| 欧美国产大片| 欧美性色aⅴ视频一区日韩精品| 欧美主播一区二区三区美女 久久精品人 | 99精品国产在热久久婷婷| 在线视频日本亚洲性| 黄色影院成人| 亚洲精品一区二区三区蜜桃久| 国产精品免费看片| 欧美大胆人体视频| 国产精品私拍pans大尺度在线 | 欧美日韩一卡| 久久精品日韩欧美| 欧美三区视频| 欧美激情按摩在线| 国产欧美日韩一区二区三区| 亚洲美女免费精品视频在线观看| 国内精品一区二区| 亚洲视频综合在线| 一区二区三区久久久| 牛人盗摄一区二区三区视频| 欧美在线高清视频| 欧美性猛片xxxx免费看久爱| 欧美高清视频在线观看| 国产欧美一区二区精品忘忧草| 日韩视频亚洲视频| 亚洲日本欧美天堂| 久久久蜜桃一区二区人| 先锋亚洲精品| 国产精品久久一区二区三区| 亚洲欧洲日夜超级视频| 亚洲国产另类久久精品| 久久久噜噜噜久久狠狠50岁| 久久成人人人人精品欧| 国产精品成人一区二区三区吃奶| 欧美激情性爽国产精品17p| 狠狠色丁香婷婷综合影院| 亚洲色图综合久久| 亚洲无亚洲人成网站77777| 欧美精品电影| 亚洲人精品午夜在线观看| 欧美日韩国产小视频| 亚洲大胆女人| 亚洲黑丝一区二区| 蜜臀久久久99精品久久久久久| 久久综合给合久久狠狠色 | 亚洲午夜精品视频| 欧美片在线观看| 亚洲欧洲在线观看| 一本久久青青| 国产精品二区在线| 亚洲欧美在线免费| 久久久精品一区| 激情婷婷亚洲| 欧美高清视频免费观看| 亚洲欧洲日本一区二区三区| 一区二区三区国产精华| 国产精品毛片va一区二区三区 | 久久视频在线看| 韩国精品久久久999| 久久蜜桃精品| 亚洲第一在线综合网站| 日韩五码在线| 欧美午夜精品理论片a级按摩| 一本大道久久a久久精品综合 | 久久久久国产精品一区二区| 国内精品久久久久久| 久久亚洲私人国产精品va媚药| 亚洲国产日韩美| 亚洲午夜免费视频| 国产精品专区h在线观看| 欧美自拍丝袜亚洲| 亚洲国产岛国毛片在线| 亚洲一区制服诱惑| 国外成人在线视频| 欧美另类在线播放| 欧美在线三区| 亚洲人www| 久久福利视频导航| 亚洲国内自拍| 国产精品制服诱惑| 美女视频黄a大片欧美| 夜夜嗨av一区二区三区网站四季av | 怡红院精品视频| 欧美特黄一区| 久久天堂成人| 亚洲一区二区三区精品在线观看| 久久夜色精品国产| 亚洲欧美在线播放| 亚洲精品欧洲精品| 国产综合色精品一区二区三区| 欧美精品情趣视频| 久久成人18免费网站| 一本色道久久综合一区| 久久综合伊人77777| 亚洲一区二区在线免费观看视频| 国产一区欧美日韩| 欧美视频中文一区二区三区在线观看| 久久国产精品久久久久久久久久| 亚洲三级影片| 欧美国产另类| 欧美怡红院视频| 亚洲天堂成人在线观看| 亚洲国产婷婷| 亚洲电影免费观看高清| 久久激情中文| 亚洲一区区二区| 另类尿喷潮videofree | 日韩网站在线看片你懂的| 国产精品jizz在线观看美国|