面试被问到sizeof的概念

面试被问到sizeof的概念

问题1: 定义一个空的类型 ,里面没有任何成员函数,和成员变量,对该类型求sizeof ,得到的结果是多少?

问题2: 如果在该类型中添加一个构造函数和析构函数呢?

问题3:如果将析构函数标记为虚函数呢?

解答:

struct student{

};
struct student stu;
std::cout<<sizeof(stu)<<std::endl;

问题1 --> 得到的结果是 1,为什么不是0我们声明改类型的实例的时候 ,它必须在内存中占有一定的空间 ,是否无法使用该实例,具体会占多少内存 ,有编译器决定,在VS里面每一个空的实例占1个字节。

struct student{
public:
	student();
	~student();
};
struct student stu;
std::cout<<sizeof(stu)<<std::endl;

问题2 --> 得到的结果依然是 1,因为构造函数和析构函数 ,不会占用内存。因为我们在调用构造函数和析构函数,只需要找到函数的地址,而这些函数的地址只与类型有关 ,和类型实例无关。所以编译器不会因为这两个函数而在实例中添加任何信息。

struct student{
public:
	student();
	virtual ~student();
};
struct student stu;
std::cout<<sizeof(stu)<<std::endl;

问题3—>得到的结果是 8。因为会生成一个虚函数表 ,有一个虚函数指针指向这个虚函数表, 在64位的电脑里面占 8字节,而在32位的电脑里面是4个字节。

如果还有其他的类型成员:还会涉及到内存对齐。

struct student{
public:
	student();
	virtual ~student();
private:
	int age;
	char ch;
};
struct student stu;
std::cout<<sizeof(stu)<<std::endl;

输出结果是16.

  • 11
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

零二年的冬

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值