c语言---结构体空间大小如何计算的
结构体空间大小如何计算的
首先,有如下结构体:
struct xx
{
int a;
char b;
short c;
};
对于上面这个结构体的大小,也许你跟我一样是这样计算的:
int a;-----> 4 个字节 char b; ------>1个字节 short c;----->2个字节
(我这里所用的是64位系统,所以int a;是4个字节。)所以,计算出来,结构体的空间大小是:4 + 1 +2 = 7字节,可答案是8字节。
计算步骤:
(1)先假设结构体中首个元素(如int a;)的第一个地址是0x0;
(2)元素本身的地址除以偏移量是一个整数,即要存放元素的那个内存地址 % 其本身的字节大小 ==0,如果取余数不等于零,则下个内存地址继续取余数,若等于零,则存放该元素;
(3)存放完所有元素后,计算这块内存的大小, 若结果 除以结构体元素中字节最大的那个数 是一个整数,则结构体的大小就是该结果。若不能整除,则结果加到整除的那个数,那么这个数就是结构体空间的大小。(比如:经过3步的计算,得到的结果是9,而上面元素最大字节数是4,但9不能整除4,所以9加到12才可以整除4,所以结构体空间的大小为12。再若计算得到的结果是8,可以整除4,所以结构体空间的大小为8字节。
图片分析如下:

验证:
#include <stdio>
int main()
{
struct xx
{
int a;
char b;
short c;
};
printf("结构体xx 的空间大小是:%ld字节\n",sizeof(struct xx ));
return 0;
}

例外:

