之前写代码时写过这样一个结构体
struct SIZE
{
double a;
int b;
char c;
double d;
};
然后,在计算这个结构体所占用空间大小时,本以为应该是 (double) 8 + (int) 4 + (char) 1+ (double) 8 = 21。但是,输出的占用内存大小却是24,经过一番查找资料后得知,计算机在存储数据的时候,为了方便会进行对齐处理。
在输出其各个数据的地址时
double 型数据的首地址 = 0097FA08
int 型数据的首地址 = 0097FA10
char 型数据的首地址 = 0097FA14
double 型数据的首地址 = 0097FA18
第一个double型数据,占八个字节大小。
而且 8 / 4 = 2,可以除尽,所以int型数据的首地址 = double首地址 + 8
char类型占一个字节大小,12 / 1 = 12,可以除尽,所以char类型首地址 = int首地址 + 4
第二个double这里,由于 13 / 8 = 1.....5,所以对char类型补三个字节的大小,第二个double类型首地址 = char首地址 + 1 + 3;
总体占用空间大小为 8 + 4 + 1 +3(所补齐的空间)+8 = 24。