sizeof结构体

1、32位机器上定义如下结构体:

struct xx 
	long long _x1; 
	char _x2; 
	int _x3; 
 	char _x4[2]; 
	static int _x5; 
 }; 
int xx::_x5;

请问sizeof(xx)的大小是()

A. 19  B. 20  C. 15  D. 24

解析:选D。sizeof虽然只是简单的操作,但涉及的知识点非常多。sizeof结构体怎样?结构体内含有结构体呢?派生类呢?带虚函数呢?空类呢?针对这题,首先_x5是静态变量可以不用管它,其次是要考虑字节对齐的问题。对于结构体中没有含有结构体变量的情况,有两条原则:1)结构体变量中成员的偏移量必须是成员大小的整数倍;2)结构体的最终大小必须是结构体最大简单类型的整数倍。x1的偏移量是0,长度是8,符合;x2的偏移量是8,长度是1,符合;x3的偏移量是9,长度是4,不符合,需要在x2之后填充3字节使得x3的偏移量达到12;x4的偏移量是16,长度是2,符合;此时总长度为(8)+(1+3)+(4)+(2)=18,而最大简单类型为long long长度为8,因此需要在x4之后再填充6字节,使得总长度达到24可被8整除。因此sizeof(xx)的结果为24。

每个元素的起始偏移地址要能被其类型大小整除,结构体整体大小要能被结构体中最大数据类型整除,静态成员不占用类空间,要注意自身是和8对齐的

你可能感兴趣的:(C/C++)