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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

sizeof运算求结构体大小

發(fā)布時(shí)間:2025/5/22 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sizeof运算求结构体大小 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

首先有幾條規(guī)則:

1. 結(jié)構(gòu)體的成員相對于結(jié)構(gòu)體的偏移量,是該成員所包含的最大簡單類型(指占用內(nèi)存數(shù))的整數(shù)倍(如果該成員本身又是一個(gè)結(jié)構(gòu)體,就要遞歸查找其簡單類型,簡單類型就是char short int float double,long)

? 比如struct a1{

?????? char a[5];

?????? int b;

???? }aa;

??? struct a2{

?????? double a;

?????? char b;

?????? a1 c;

????? char d;

????? }bb;

???? 此例中,aa.b相對于aa的偏移值是int的整數(shù)倍,所以aa.b的偏移值是8,aa.a后面有三字節(jié)填充;

??? a2中bb.c的偏移值是a1所含的最大簡單類型的整數(shù)倍,a1包含的最大簡單類型是int,所以bb.c的偏移值是4的倍數(shù),所以bb.c的偏移值是12,char類型的偏移值是1的倍數(shù),double偏移值是8的倍數(shù)。long的長度根據(jù)規(guī)范,sizeof(long)>=sizeof(int),我的64位機(jī)器,vc2005,發(fā)現(xiàn)int=long=4字節(jié),64位數(shù)據(jù)類型必須使用longlong或者其他windows自己定義的類型。

2. 結(jié)構(gòu)體的最終大小,還要通過在結(jié)構(gòu)體的末尾填充字節(jié),使得結(jié)構(gòu)體大小是結(jié)構(gòu)體最大簡單類型(如果需要遞歸查詢簡單類型的話就要遞歸取出最大簡單類型)的整數(shù)倍

上述例子中,bb的大小,必須是8的整數(shù)倍. aa的大小為12,a1類型的成員在結(jié)構(gòu)體中的起始位置應(yīng)該是4的整數(shù)倍。這樣,a2的大小就是8+1+offset(bb.c) + sizeof(a1) + sizeof(d)+padding = 12+sizeof(a1)+1+ padding = 25+padding = 8的倍數(shù), 所以sizeof(a2)應(yīng)該取整到32,最后填充了7個(gè)字節(jié)。

3. 聯(lián)合類型union也是類似,union的成員的起始偏移(這是指,當(dāng)union作為復(fù)合結(jié)構(gòu)的成員變量時(shí),相對于所在復(fù)合體)也要對齊到該成員所含最大簡單類型的整數(shù)倍上,union的最終大小也要補(bǔ)齊到最大簡單類型的整數(shù)倍上

比如union b1{

?????? char a[5];

?????? int b;

?? };

??? struct b2{

?????? char a[3];

?????? b1 b;

???? char c;

???? };

則b1的大小為8(最終大小要對齊到int類型的整數(shù)倍上), b2中的b的偏移值,應(yīng)該是b的子成員的最大簡單類型的倍數(shù),也就是b的偏移是4的倍數(shù),所以b的偏移是4,b2的大小為12,b2的成員c的末尾還要補(bǔ)上3個(gè)字節(jié),保證b2的大小是其成員中最大簡單類型的整數(shù)倍。

?

轉(zhuǎn)載于:https://www.cnblogs.com/xinyuyuanm/archive/2013/04/09/3010888.html

總結(jié)

以上是生活随笔為你收集整理的sizeof运算求结构体大小的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。