面试被问到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.

相关推荐
枫叶丹43 小时前
【Qt开发】布局管理器(五)-> QSpacerItem 控件
开发语言·数据库·c++·qt
月下倩影时3 小时前
ROS1基础入门:从零搭建机器人通信系统(Python/C++)
c++·python·机器人
_OP_CHEN3 小时前
C++进阶:(八)基于红黑树泛型封装实现 map 与 set 容器
开发语言·c++·stl·set·map·红黑树·泛型编程
洛卡卡了3 小时前
当上传不再只是 /upload,我们是怎么设计大文件上传的
后端·面试·架构
无敌最俊朗@3 小时前
C++线程中detach和join的注意点
c++
努力努力再努力wz3 小时前
【Linux进阶系列】:线程(下)
linux·运维·服务器·c语言·数据结构·c++·算法
over6974 小时前
CSS定位全解析:从文档流到高级布局技巧
前端·css·面试
Alaso_shuang4 小时前
Raylib贴图
c语言·图形渲染·贴图·raylib库·c语言项目
abcd_zjq4 小时前
VS2026+QT6.9+ONNX+OPENCV+YOLO11(目标检测)(详细注释)(附测试模型和图像)
c++·人工智能·qt·目标检测·计算机视觉·visual studio
代码程序猿RIP4 小时前
【Linux面经】OSI七层模型和TCP/IP四层体系结构
linux·网络·面试·面经