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

山寨:不是最好的,是最適合我們的!歡迎體驗(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:返回類型的尺寸

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


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

無(wú)論我們用iVal還是int,上面的表達(dá)式都會(huì)返回int類型的尺寸(當(dāng)然如前所說(shuō),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)格起來(lái)并不如此。上面的代碼就會(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è)問(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自己的類型所占據(jù)的空間,而不是p指向的對(duì)象所占據(jù)的空間,可以說(shuō),p自己占據(jù)4個(gè)字節(jié),而p指向的空間占40字節(jié)。

在這種概念下,我們是不是可以通過(guò)sizeof(*p)來(lái)得到40呢?很不幸,不行,原因是p的類型是int*,*p的類型是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)只要一次讀寫即可。

為了性能考慮,編譯器會(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指令的含義,大家可以查詢MSDN。請(qǐng)注意:除非你覺(jué)得必須這樣,不要輕易做這樣的調(diào)整,因?yàn)檫@將降低程序性能。目前比較常見(jiàn)的用法是:1. 這個(gè)結(jié)構(gòu)需要被直接寫入文件 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)  編輯 收藏 引用 所屬分類: 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>
            99精品视频免费观看视频| 久久国产福利国产秒拍| 亚洲免费人成在线视频观看| 亚洲日本va午夜在线影院| 亚洲国产精品va| 亚洲国产精品视频一区| 久久久www成人免费无遮挡大片| 日韩一级片网址| 日韩午夜精品视频| 亚洲一区二区成人在线观看| 午夜国产精品影院在线观看 | 久久久久国产一区二区三区| 久色婷婷小香蕉久久| 欧美国产在线观看| 亚洲精品乱码久久久久久按摩观| 亚洲人精品午夜在线观看| 夜夜嗨av一区二区三区| 亚洲一区在线看| 女生裸体视频一区二区三区| 欧美久色视频| 国内偷自视频区视频综合| 最新中文字幕亚洲| 欧美专区第一页| 亚洲国产精品专区久久| 亚洲自拍偷拍色片视频| 免费欧美视频| 国产精品色婷婷久久58| 日韩视频二区| 久久久久久久一区二区三区| 日韩小视频在线观看| 久久久久欧美| 国产精品―色哟哟| 99国产精品视频免费观看| 久久这里只精品最新地址| 宅男在线国产精品| 欧美日本国产视频| 亚洲二区视频在线| 久久久久久久久久久久久久一区| 一本久久综合| 久久久综合香蕉尹人综合网| 亚洲精品视频一区二区三区| 久久久视频精品| 欧美特黄a级高清免费大片a级| 影音欧美亚洲| 久久一区二区三区四区五区| 亚洲女优在线| 欧美午夜一区二区| 一区二区三区www| 亚洲国产va精品久久久不卡综合| 欧美一级精品大片| 国产精品日韩欧美| 亚洲深夜av| 最新日韩在线视频| 欧美激情在线免费观看| 亚洲激情偷拍| 米奇777超碰欧美日韩亚洲| 亚洲欧美日韩在线观看a三区 | 久久成人免费网| 国产精品久久久爽爽爽麻豆色哟哟| 日韩视频专区| 日韩视频不卡中文| 9色porny自拍视频一区二区| 免费永久网站黄欧美| 亚洲激情自拍| 亚洲国产欧美久久| 嫩草影视亚洲| 亚洲精品欧美日韩| 最新国产成人在线观看| 欧美极品一区二区三区| 亚洲美女av黄| 日韩小视频在线观看专区| 欧美日韩免费网站| 亚洲嫩草精品久久| 香蕉久久夜色精品| 国内在线观看一区二区三区 | 一本色道久久综合狠狠躁篇怎么玩| 免费观看成人| av成人黄色| 香蕉久久夜色精品| 国内精品久久久久久| 亚洲成色777777在线观看影院| 欧美日本在线看| 欧美在线|欧美| 卡一卡二国产精品| 亚洲深爱激情| 久久精品亚洲精品| 亚洲精品社区| 亚洲欧美日韩精品久久久| 影音先锋久久精品| 一区二区三区久久精品| 国产一区二三区| 亚洲国产美女| 国产欧美1区2区3区| 亚洲国产天堂久久国产91| 亚洲国产精品专区久久| 欧美视频三区在线播放| 久久综合九九| 欧美午夜精品久久久久久孕妇| 久久久天天操| 欧美日韩国产色视频| 久久综合久色欧美综合狠狠| 欧美日韩黄色大片| 母乳一区在线观看| 国产九色精品成人porny| 亚洲电影免费观看高清完整版| 国产精品久久久久久久app| 欧美成人综合一区| 国产欧美一区二区三区另类精品 | 亚洲欧美日韩一区二区三区在线| 欧美一区二区三区的| 在线一区二区日韩| 久久久久久欧美| 亚洲一区二区在线视频| 麻豆精品在线视频| 久久亚洲风情| 国产精品视频导航| 9久re热视频在线精品| …久久精品99久久香蕉国产 | 亚洲国产精品成人| 国产在线不卡精品| 亚洲一级在线观看| 欧美午夜不卡在线观看免费| 久久久久成人精品免费播放动漫| 欧美日韩成人一区| 亚洲大胆女人| 影音先锋另类| 久久久人成影片一区二区三区| 久久国产精品久久精品国产| 国产精品黄色在线观看| 99在线热播精品免费| 日韩一级片网址| 欧美激情综合五月色丁香| 亚洲第一视频| 亚洲韩国青草视频| 欧美aaaaaaaa牛牛影院| 欧美激情精品久久久久久黑人| 亚洲高清三级视频| 玖玖精品视频| 亚洲第一福利在线观看| 亚洲国产欧美另类丝袜| 免费一级欧美片在线观看| 亚洲韩国日本中文字幕| 夜夜嗨av一区二区三区中文字幕 | 欧美成va人片在线观看| 亚洲成人在线网| 99精品欧美一区| 欧美日韩免费在线| 中文在线一区| 欧美在线3区| 狠狠色综合一区二区| 久久亚洲精品中文字幕冲田杏梨 | 亚洲网站啪啪| 国产精品久久久久久久久久妞妞 | 亚洲特级片在线| 欧美午夜剧场| 亚洲综合首页| 久久网站热最新地址| 激情综合视频| 欧美国产一区视频在线观看| 99ri日韩精品视频| 午夜精品网站| 一区二区三区亚洲| 欧美激情在线有限公司| 亚洲中无吗在线| 欧美va亚洲va国产综合| 这里只有精品在线播放| 国产综合久久| 欧美日韩另类一区| 性色一区二区三区| 亚洲精品在线视频观看| 久久久久国产精品一区三寸| 亚洲另类春色国产| 国产日产欧产精品推荐色 | 蜜臀av性久久久久蜜臀aⅴ四虎| 亚洲黄页视频免费观看| 性欧美长视频| 最新国产拍偷乱拍精品| 国产精品激情偷乱一区二区∴| 亚洲欧美日韩综合aⅴ视频| 欧美肥婆bbw| 午夜精品www| 亚洲精品自在久久| 久久精品中文| 在线综合视频| 欧美激情精品久久久久久免费印度| 亚洲男人av电影| 99精品免费网| 在线看片成人| 国产日韩欧美麻豆| 欧美性理论片在线观看片免费| 久久国产精品99久久久久久老狼| 91久久久久久久久| 久久人91精品久久久久久不卡 | 在线观看国产一区二区| 国产精品大片wwwwww| 欧美成人午夜77777| 久久精品三级| 欧美一区二区三区四区在线 | 久久视频在线看| 欧美一区免费|