結構體的大小
阿新 • • 發佈:2018-11-22
typedef struct student
{
char a;
int b;
float c;
double d
}stu;
int main()
{
int a = sizeof(stu);
printg("%d\n",a);
}
這個結果為
看來結構體的大小並不是簡單的將結構體中所有資料型別相加那麼簡單
這是因為結構體中存在“記憶體對齊”
如圖 a為char型別,b為int 型別 系統在讀取這些記憶體資料時就會預設3個紅格子來補齊記憶體 以便於下一趟時不會產生差錯;
typedef struct student { char a;//1+3 int b;//4 float c;//4+4 double d;//8 }stu;
在算結構體大小的時候要對齊記憶體如上圖程式碼中 a的記憶體為1 在加上吧int型時 記憶體要加3
和b加起來就為8,8時float型的倍數 所以直接加上c的大小為12;12不是double型的倍數所以加上4為16,最後在加上double型的大小就為24了;
注意 結構體最後的大小還應該是 結構體擁有的最大的型別的倍數;
如例子中double的大小為8 24恰好是8的倍數就不做處理;而在為別的數時就要繼續對齊。