题目:
若char是一字节,int是4字节,指针类型是4字节,代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
问:
(1)若按4字节对齐sizeof(CTest)的值是多少? 12
(2)若按1字节对齐sizeof(CTest)的值是多少? 9
解析:
在类中:
1)如果什么都没有,则类占用1个字节。
2)一旦类中有其他的占用空间成员,则这1个字节就不在计算之内,如一个类只有一个int则占用4字节而不是5字节。
如果只有成员函数,则还是只占用1个字节,因为类函数不占用空间
虚函数因为存在一个虚函数表,需要4个字节,数据成员对象如果为指针则为4字节,注意有字节对齐,如果为13字节,则进位到16字节空间。
因此:
1、按一字节对齐情况:
由于static成员变量是存储在静态区当中的,它是一个共享的量,因此,在为这个类创建一个实例对象的时候,是无需再为static成员变量分配空间的,因此sizeof值为char(1)+int(4)+虚函数(4)=9字节。
2、按4字节对齐情况
char(4)+int(4)+虚函数(4)=12字节
额,以这种思路解决:9和哪个4的倍数最近?所以就是12字节。不知道这种会不会有问题?