面试被问到sizeof的概念

面试被问到sizeof的概念

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

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

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

解答:

cpp 复制代码
struct student{

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

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

cpp 复制代码
struct student{
public:
	student();
	~student();
};
struct student stu;
std::cout<<sizeof(stu)<<std::endl;

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

cpp 复制代码
struct student{
public:
	student();
	virtual ~student();
};
struct student stu;
std::cout<<sizeof(stu)<<std::endl;

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

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

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

输出结果是16.

相关推荐
Legendary_008几秒前
从 DC 圆口到 USB-C PD:LED 照明设备的供电升级逻辑
c语言·开发语言
运筹vivo@26 分钟前
LeetCode 2574. 左右元素和的差值
算法·leetcode·职场和发展·每日一题
野生技术架构师35 分钟前
2026 Java面试宝典(春招/社招/秋招通用):没有前言,只有答案,直接开背
java·开发语言·面试
ychqsq39 分钟前
45.新芽
经验分享·职场和发展
AI人工智能+电脑小能手44 分钟前
【大白话说Java面试题 第99题】【Mysql篇】第29题:如何选择合适的分布式主键方案?
java·数据库·分布式·mysql·面试
GuWenyue1 小时前
LeetCode 76 最小覆盖子串|JS 滑动窗口标准解法
前端·算法·面试
拾年2751 小时前
__proto__ vs prototype:90% 的人分不清的 JavaScript 核心
前端·javascript·面试
一只齐刘海的猫1 小时前
【Leetcode】移动零
算法·leetcode·职场和发展
神奇小汤圆1 小时前
SEATA:Server 到 Golang Client 全链路走读
面试
超人气王1 小时前
新手学前端JS浅拷贝和深拷贝:对象复制竟然是个“替身文学”?
javascript·面试