結構體的大小 記憶體對齊
阿新 • • 發佈:2018-11-22
結構體的大小 記憶體對齊
Struct A
{
int a;
int b;
};
int main()
{
Printf(“%d\n”,sizeof(struct A));
共佔8位元組
Struct B
{
char a;//1+3(加上3成為4的倍數,雖浪費了3個位元組,但速度更快)
int b;//4
};
共佔8位元組
Struct C
{
char a;//1+1(加上1為2的倍數 )
short b;//2
int c;//4
}
共佔8位元組
Struct D
{
char a;//1+3(加上3為4的倍數)
int b;//4
int c;//4
double d;//8+4(所有位元組加起來之和要為8的倍數,一共是20位元組,並不是8的倍數因此在加上4為24,24是8的倍數,全部加起來要是最大的那一個的倍數才可)
}
共佔24位元組
Struct E
{
char a;//1+3(加上3為4的倍數)
int b;//4
short c;//2+2(原來位元組之和為10,因為最大的為int型別,判斷10不是4的倍數,因此在加兩個位元組即可)
}
共佔記憶體10+2位元組//考慮陣列的記憶體
Struct E arr[2]
對比:
Struct G//不需要考慮對齊的應用
{
char a;//1
char x;//保留,不適用
short b;//2
int c;//4
}