日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

用对齐原则求结构体长度

發布時間:2025/3/20 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用对齐原则求结构体长度 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

用對齊原則求結構體長度

[日期:2009-09-18]來源:中嵌信息? 作者:chinaeda-news[字體:大 中 小]
1. 熟悉Win32下VC6.0各種基本數據長度:

?size of int is: 4
size of char is: 1
size of short int is: 2
size of double is: 8
size of unsigned int is: 4
size of float is: 4
size of long double is: 8
size of long int is: 4
size of long int is: 4
size of unsigned char is: 1
size of signed char is: 1
size of unsigned long int is: 4
size of signed int is: 4
size of unsigned short int is: 2
size of signed short int is: 2
size of signed int is: 4
size of signed long int is: 4

sizeof 指針 is 4;

??? 2. 結構體長度求法:

??? a.成員都相同時(或含數組且數組數據類型同結構體其他成員數據類型):

??? 結構體長度=成員數據類型長度×成員個數(各成員長度之和);

??? 結構體中數組長度=數組數據類型長度×數組元素個數;

??? b.成員不同且不含其它結構體時;

??? (1)分析各個成員長度;

??? (2)找出最大長度的成員長度M(結構體的長度一定是該成員的整數倍);

??? (3)并按最大成員長度出現的位置將結構體分為若干部分;

??? (4)各個部分長度一次相加,求出大于該和的最小M的整數倍即為該部分長度

??? (5)將各個部分長度相加之和即為結構體長度

??? c含有其他結構體時:

??? (1)分析各個成員長度;

??? (2)對是結構體的成員,其長度按b來分析,且不會隨著位置的變化而變化;

??? (3)分析各個成員的長度(成員為結構體的分析其成員長度),求出最大值;

??? (4)若長度最大成員在為結構體的成員中,則按結構體成員為分界點分界;

??? 其他成員中有最大長度的成員,則該成員為分界點;

??? 求出各段長度,求出大于該和的最小M的整數倍即為該部分長度

??? (5)將各個部分長度相加之和即為結構體長度

??? 舉例來說:

?1.

struct test1

{ int a;

int b[4];

};

sizeof(test1)=sizeof(int)+4*sizeof(int)=4+4*4=20;

2. struct test2

{ char a;

int b;

double c;

bool d;

};

??? 分析:該結構體最大長度double型,長度是8,因此結構體長度分兩部分:

??? 第一部分是a、 b、 c的長度和,長度分別為1,4,8,則該部分長度和為13,取8的大于13的最小倍數為16;

??? 第二部分為d,長度為1,取大于1的8的最小倍數為8,

??? 兩部分和為24,故sizeof(test2)=24;

?3. struct test3

{

char a;

test2 bb;//見上題

int cc;

}

??? 分析:該結構體有三個成員,其中第二個bb是類型為test2的結構體,長度為24,且該結構體最大長度成員類型為double型,以后成員中沒有double型,所以按bb分界為兩部分:

??? 第一部分有a 、bb兩部分,a長度為1,bb長度為24,取8的大于25的最小倍數32;

??? 第二部分有cc,長度為4,去8的大于4的最小倍數為8;

??? 兩部分之和為40,故sizeof(test3)=40;

?4. struct test4

{

char a;

int b;

};

struct test5

{ char c;

test4 d;

double e;

bool f;

};

求sizeof(test5)

??? 分析:test5明顯含有結構體test4,按例2容易知道sizeof(test4)=8,且其成員最大長度為4;則結構體test5的最大成員長度為8(double 型),所以e是分界點,分test5為兩部分:

??? 第一部分由c 、d、e組成,長度為1、8、8,故和為17,取8的大于17的最小倍數為24;

??? 第二部分由f組成,長度為1,取8的大于1的最小倍數為8,

??? 兩部分和為32,故sizeof(test5)=24+8=32;

??? 在VC6.0下程序驗證 結果是正確的。

?

閱讀:20

總結

以上是生活随笔為你收集整理的用对齐原则求结构体长度的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。