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

相关推荐
散峰而望8 小时前
【算法竞赛】C++函数详解:从定义、调用到高级用法
c语言·开发语言·数据结构·c++·算法·github
冷凝雨8 小时前
复数乘法(C & Simulink)
c语言·开发语言·信号处理·simulink·dsp
CoderCodingNo8 小时前
【GESP】C++五级真题(贪心思想考点) luogu-B4071 [GESP202412 五级] 武器强化
开发语言·c++·算法
我有一些感想……9 小时前
An abstract way to solve Luogu P1001
c++·算法·ai·洛谷·mlp
智者知已应修善业10 小时前
【求等差数列个数/无序获取最大最小次大次小】2024-3-8
c语言·c++·经验分享·笔记·算法
LYFlied10 小时前
【每日算法】LeetCode 416. 分割等和子集(动态规划)
数据结构·算法·leetcode·职场和发展·动态规划
..过云雨10 小时前
17-2.【Linux系统编程】线程同步详解 - 条件变量的理解及应用
linux·c++·人工智能·后端
坚持学习前端日记10 小时前
软件开发完整流程详解
学习·程序人生·职场和发展·创业创新
量子炒饭大师11 小时前
Cyber骇客的逻辑节点美学 ——【初阶数据结构与算法】二叉树
c语言·数据结构·c++·链表·排序算法
fpcc11 小时前
C++编程实践—false_type和true_type的实践应用
c++