sizeof占的内存大小

题目:

若char是一字节,int是4字节,指针类型是4字节,代码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

class CTest

{

    public:

        CTest():m_chData(‘\0’),m_nData(0)

        {

        }

        virtual void mem_fun(){}

    private:

        char m_chData;

        int m_nData;

        static char s_chData;

};

char CTest::s_chData=’\0’;

问:

(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字节。不知道这种会不会有问题?
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值