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

相关推荐
xlp666hub20 小时前
Leetcode第一题:用C++解决两数之和问题
c++·leetcode
韭菜炒大葱21 小时前
前端经典面试题:从 URL 输入到页面展示,中间经历了什么?
前端·http·面试
kevinzeng21 小时前
反射的初步理解
后端·面试
swipe21 小时前
纯函数、柯里化与函数组合:从原理到源码,构建更可维护的前端代码体系
前端·javascript·面试
Lee川21 小时前
JavaScript 中的 `this` 与变量查找:一场关于“身份”与“作用域”的深度博弈
前端·javascript·面试
前端拿破轮1 天前
从0到1搭建个人网站(三):用 Cloudflare R2 + PicGo 搭建高速图床
前端·后端·面试
用户3958561421141 天前
从理论到实践:哪些EMBA项目真正提供“干货”课程?
面试
Wect1 天前
JSX & ReactElement 核心解析
前端·react.js·面试
不想写代码的星星1 天前
C++继承、组合、聚合:选错了是屎山,选对了是神器
c++
Lee川2 天前
JavaScript 面向对象编程全景指南:从原始字面量到原型链的终极进化
javascript·面试