小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

計算結構體的大小(VC++)

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

摘要:本文簡要介紹了VC++編譯器中結構體大小的計算原則并給出了幾個實例

關鍵字:struct,sizeof,對齊

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

度。較為復雜的類型就是結構體,他的大小并不是簡單的把各個元素的長度相加,而是要考慮到編譯器

所做的對齊填充處理。

           VC++編譯器中的結構體的對齊要遵循以下三條原則:

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

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

三、當結構體重有嵌套的結構體時,只需把嵌套的結構體展開。但是嵌套結構體的第一個元素

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

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

編譯器對對齊的處理時不一樣的。

          下面給出了四個結構體,這些結構體的大小都可以通過以上三條原則計算出,實踐表明

計算結構與在vc++編譯器中的運行結果一致!

/*
* 計算結構體的大小
*/

#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;
}


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

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多