C++面试题 sizeof

一、 sizeof

   a. 空类型的sizeof是多大呢?

#include <stdio.h>
#include <iostream>

using namespace std;

struct A{
};

class B{
};


int main()
{

        struct A *ptra = (struct A *)malloc(sizeof(struct A));
        B *ptrb = new B();
        struct A a;
        static  B b;

        cout << sizeof(a) << endl;
        cout << sizeof(b) << endl;
        cout << sizeof(ptra) << endl;
        cout << sizeof(ptrb) << endl;

        free(ptra);
        delete ptrb;
}


结果是:1,1, 8, 8

空类型本来是0,然而声明实例后必须占据一定的存储空间才能访问到,根据编译器决定,GCC是1, 而指针在64位机器上是8。

如果这些变量被声明为全局的或是静态的,就会放在BSS段。


b. 添加构造函数和析构函数

#include <stdio.h>
#include <iostream>

using namespace std;

struct A{
        A(){};
        ~A(){};
};

class B{
public: 
        B(){};  
        ~B(){};
};


int main()
{

        struct A *ptra = (struct A *)malloc(sizeof(struct A));
        B *ptrb = new B();
        struct A a;
        static  B b;

        cout << sizeof(a) << endl;
        cout << sizeof(b) << endl;
        cout << sizeof(ptra) << endl;
        cout << sizeof(ptrb) << endl;

        free(ptra);
        delete ptrb;
}



仍旧是1,1, 8, 8.因为函数地址不需要存储在结构体当中;

c. 析构函数改为虚函数

#include <stdio.h>
#include <iostream>

using namespace std;

struct A{
        A(){};
        ~A(){};
};

class B{
        public:
                B(){};
                virtual ~B(){};
                //~B(){};
};


int main()
{

        static  struct A *ptra = (struct A *)malloc(sizeof(struct A));
        static  B *ptrb = new B();
        static  struct A a;
        static  B b;

        cout << sizeof(a) << endl;
        cout << sizeof(b) << endl;
        cout << sizeof(ptra) << endl;
        cout << sizeof(ptrb) << endl;

        free(ptra);
        delete ptrb;
}
1, 8, 8, 8.

b中就会增加一个指向虚函数表的指针,b也相应的存在data段。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值