假设有如下代码:
输出结果为:
1 4 1 4 8 12 1 4 8 8 1 8 8 12
解析:
A为空类,空类所占空间为1
B里面带有一个int元素,int占空间4
C里面没有数据成员,相当于空类,占空间1
D有虚函数,虚函数涉及到虚表(虚指针),因此占空间4(注意,此处假设还有其他虚函数,但是只要没有数据成员,所占空间还是4)
E里面除了虚函数还有一个int成员,因此占空间8
F中除了虚函数跟int成员外还有一个char*指针,但是不管是什么指针,其所占空间都为4,因此总共为12
G单一继承空类A,因此其所占空间还是1(注意,即使是多重继承空类,则其所占空间还是1)
H虚继承A,因为涉及到虚表,因此其所占空间为4
I虚继承B,因为涉及到虚表,并且B中本来有一个int变量,因此所占空间为8
J虚继承A,B,因为涉及到虚表,并且B中本来有一个int变量,因此所占空间为8(不因为两个虚继承而为12)
K中有一个静态变量,因为静态变量是存放在全局数据区的,而sizeof计算栈中分配的大小,是不会计算静态变量的,因此其所占空间为1
L,M,N涉及到内存中数据对齐的问题无论是先int后两个char或者先两个char再来一个int,其所占空间为8,而一个char,一个int,一个char所占空间为12(此时为了对齐,每个char占空间4)