日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

計(jì)算結(jié)構(gòu)體的大小(VC++)

 啟蒙彩魂 2011-04-29
計(jì)算結(jié)構(gòu)體的大小(VC++)
2011年04月29日 星期五 12:27

摘要:本文簡要介紹了VC++編譯器中結(jié)構(gòu)體大小的計(jì)算原則并給出了幾個(gè)實(shí)例

關(guān)鍵字:struct,sizeof,對(duì)齊

           基本數(shù)據(jù)類型如char,int,double的大小可以直接拿到,數(shù)組的大小就是元素類型乘以數(shù)組長

度。較為復(fù)雜的類型就是結(jié)構(gòu)體,他的大小并不是簡單的把各個(gè)元素的長度相加,而是要考慮到編譯器

所做的對(duì)齊填充處理。

           VC++編譯器中的結(jié)構(gòu)體的對(duì)齊要遵循以下三條原則:

一、結(jié)構(gòu)體中成員變量的偏移量(相對(duì)于結(jié)構(gòu)體起始位置)必須是該成員變量大小的整數(shù)倍。

二、結(jié)構(gòu)體的總大小必須是所有成員變量大小的整數(shù)倍。

三、當(dāng)結(jié)構(gòu)體重有嵌套的結(jié)構(gòu)體時(shí),只需把嵌套的結(jié)構(gòu)體展開。但是嵌套結(jié)構(gòu)體的第一個(gè)元素

          的偏移量必須是被展開的結(jié)構(gòu)體的最大的成員變量的整數(shù)倍!

          注意,以上原則只使用于微軟的C/C++編譯器(X86內(nèi)核),在其他編譯器中如GCC/G++中,

編譯器對(duì)對(duì)齊的處理時(shí)不一樣的。

          下面給出了四個(gè)結(jié)構(gòu)體,這些結(jié)構(gòu)體的大小都可以通過以上三條原則計(jì)算出,實(shí)踐表明

計(jì)算結(jié)構(gòu)與在vc++編譯器中的運(yùn)行結(jié)果一致!

/*
* 計(jì)算結(jié)構(gòu)體的大小
*/

#include <iostream>

using namespace std;

struct Struct1
{
char a;
double b;
};

struct Struct2
{
char a;
double b;
char c;
};

struct Struct3
{
char a;
char c;
double b;
};

struct Struct4
{
char a;
struct StructInter
{
   int b;
   double c;
   int d;
} Si;
int e;
};
void test()
{
cout<<sizeof(Struct1)<<endl; //16
cout<<sizeof(Struct2)<<endl; //24
cout<<sizeof(Struct3)<<endl; //16
cout<<sizeof(Struct4)<<endl;//40
}

int main(int argc, char* *argv)
{
test();
return 0;
}


    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多