sizeof計算結構體大小(位元組對齊)

2021-07-10 22:46:17 字數 580 閱讀 3901

引言:sizeof計算結構體的大小經常出現在筆試題中,接下來是對它的一些總結

#pragma pack(8)

struct s1;

struct s2;

//求sizeof(s2)的值?(32位機)

解:

1. 先看s1,a的有效對齊值為min(2,8)=2,偏移量為0,0%2=0,符合;b的有效對齊值為min(4,8)=4,偏移量本該是0+2=2,但是2%4!=0,所以其偏移量變成4;結構體大小為b的偏移量+b的位元組數=4+4=8,結構體s1的有效對齊值為min(4,8)=4,因為8%4=0,所以不需要加補充位元組數

2. 再看s2,c的有效對齊值為min(1,8)=1,偏移量為0,0%1=0,符合;d得有效對齊值為上面計算的8,d的偏移量本該是0+1=1,但是1%4!=0,所以d偏移量變成4;e的有效對齊值為min(8,8)=8,e的偏移量本該是d的偏移量加上其大小,為4+8=12,但是12%8!=0,所以e得偏移量為16;s2的大小為16+8=24,因為s2的有效對齊值為min(8,8)=8,24%8=0,所以不需要加補充位元組數,s2大小為24

計算結構體大小(位元組對齊)

一,預設對齊方式 位元組對齊的細節和具體編譯器實現相關,但一般而言,滿足以下三個準則 也是vc預設對齊方式 1,結構體變數的首位址能夠被其最寬基本型別成員的大小所整除 0能被任意整數整除 2,結構體每個成員相對於結構體首位址的偏移量都是該成員型別大小的整數倍,如有需要編譯器會在成員之間加上填充位元組...

sizeof的對結構體的大小計算

include using namespace std structa structb structc void main c 結果為 8 8 16consider why?經過查閱資料發現,1 預設情況下,為方便對結構體內元素的訪問與管理,當結構體內的元素的長度都小於處理器 的位數的時候,便以結構...

結構體大小sizeof的理解

在32位編譯環境中 sizeof的用法 sizeof char 1 sizeof int 4 sizeof unsigned int 4 sizeof long int 4 sizeof short int 2 sizeof float 4 sizeof double 8 2.指標變數的sizeof...