C++面试八股文:了解sizeof操作符吗?
某日二师兄参加XXX科技公司的C++工程师开发岗位第10面:
面试官:了解
sizeof操作符吗?二师兄:略微了解(不就是求大小的嘛。。)
面试官:请讲以下如何使用
sizeof?二师兄:
sizeof主要是求变量或者类型的大小。直接使用sizeof(type)或sizeof(var)即可。面试官:嗯。
sizeof(int*)、sizeof(int**)和sizeof(int[4])各返回什么?二师兄:前两者的返回值相等。在32位操作系统中返回4,64位操作系统中返回8。
sizeof(int[4])返回16,是因为sizeof运算时数组不会退化为指针。面试官:如果一个
int* p = nullptr,那么对其进行sizeof(*p)会发生什么?二师兄:返回4。原因是
sizeof在编译时求值,sizeof只需要获取*p的类型,并不对*p求值。所以不会发生段错误。面试官:下面三个
szieof运算符,各返回什么?
#include <iostream>
#include <string>
int main(int argc, char const *argv[])
{
const char* str1 = "hello";
char str2[] = "hello";
std::string str3 = "hello";
std::cout << sizeof(str1) << std::endl;
std::cout << sizeof(str2) << std::endl;
std::cout << sizeof(str3) << std::endl;
}
二师兄:第一个返回4或8,因为它是个指针,第二个是个数组,不过末尾有个
\0结束符,所以它的值是6,第三个不清楚,但是等于sizeof(std::string)。面试官:好的。使用
sizeof对以下两个结构体求大小,
#include <iostream>
struct Foo
{
char c;
int i;
double d;
};
struct Goo
{
char c;
double d;
int i;
};
int main(int argc, char const *argv[])
{
std::cout << sizeof(Foo) << std::endl;
std::cout << sizeof(Goo) << std::endl;
}
二师兄:
sizeof(Foo)应该等于16,而sizeof(Goo)应该等于24。因为需要内存对齐。面试官:好的。那你知内存对齐的原则是什么,为什么要内存对齐?
二师兄:额。。。应该需要以8位对齐吧。。。不是很清楚为什么要内存对齐。
面试官:你知道
sizeof(空结构体)的结果是多少吗?二师兄:应该是0吧。
面试官:对只有一个函数的类进行
sizeof运算结果是多少?二师兄:应该也是0?
面试官:好的,回去等通知吧。
让我们复盘以下今日二师兄的表现。
内存对齐的原则是什么,为什么要内存对齐?
主要有以下原则:
- 结构体变量的首地址是其最宽基本成员类型大小的整数倍。
- 结构体每个成员相对于结构体首地址的偏移量都是成员大小的整数倍。
- 结构体的总大小为结构体最宽基本成员类型大小的整数倍。
因为性能。为了缓存友好(Cache friendly)。这是一个很大的话题,咱们今天聊不了太多。
sizeof(空结构体)的结果是多少?
这里在C中是0,在C++中是1。C++标准规定,不同的对象不能拥有相同的内存地址。 如果空类大小为0,类的对象数组中的每个对象都拥有了相同的地址,这显然是违背标准的。
对只有一个函数的类进行
sizeof运算结果是多少?
这里也是一个坑。要看这个函数是不是虚函数。如果不是虚函数,则结果是1,如果是虚函数,则大小是4或者8。
聪明的小伙伴,提到4或者8.就应该知道是怎么回事了吧?
好了,今日份面试到这里就结束了,小伙伴们,对于今天二师兄的面试,能打几分呢?如果是你,以上的问题都能回答的上来吗?
关注我,带你21天“精通”C++!(狗头)
C++面试八股文:了解sizeof操作符吗?的更多相关文章
- C++ sizeof操作符的用法和strlen函数的区别
摘要:本人首先介绍了C++中sizeof操作符的用法和注意事项,其次对比了和strlen的区别和使用,方便大家在写代码的时候查阅,和面试.笔试的时候复习. 目录: sizeof的用法: sizeof和 ...
- C语言strlen函数和sizeof操作符
字符'x'于字符串"x"的区别 'x' 属于基本类型(char)字符类型-----------------由1个字符组成('x') "x"属于派生类型(char ...
- 字符串 前篇 ---- sizeof()操作符和strlen()库函数
本文不是研究sizeof(), strlen() 的深奥定义和原理,我们不会在理论上太过钻牛角尖.希望读这篇文章的你,也不要太过抠概念(不要拘泥于语法).我们只做 实用意义 的介绍和讨论. 在介绍字符 ...
- sizeof操作符-结构体与类大小
导读 sizeof是C/C++一个难点,当在自定义类上应用sizeof操作符时,总会出现意想不到的结果,下面,我们就来探讨一下sizeof这个操作符! 目录 1. sizeof与strlen的区别 2 ...
- C++中sizeof操作符与strlen函数
sizeof操作符: sizeof是一个操作符,返回一条表达式或一个类型名字所占的字节数.返回值一个常量表达式,类型为size_t. size_t sizeof(type) size_t sizeof ...
- 《面试八股文》之kafka21卷
微信公众号:moon聊技术 关注选择" 星标 ", 重磅干货,第一 时间送达! [如果你觉得文章对你有帮助,欢迎关注,在看,点赞,转发] 大家好,我是moon,最新一篇面试八股文系 ...
- 《面试八股文》之 Redis 16卷
微信公众号:moon聊技术 关注选择" 星标 ", 重磅干货,第一 时间送达! [如果你觉得文章对你有帮助,欢迎关注,在看,点赞,转发] 大家好,我是 moon. redis 作为 ...
- 《面试八股文》之 JVM 20卷
微信公众号:moon聊技术 关注选择" 星标 ", 重磅干货,第一 时间送达! [如果你觉得文章对你有帮助,欢迎关注,在看,点赞,转发] 大家好,我是 moon. <面试八股 ...
- C++面试中关于sizeof问题总结
原文:http://blog.sina.com.cn/s/blog_7c983ca60100yfdv.html#SinaEditor_Temp_FontName (1) sizeof是操作符 ...
- c/c++面试12-18------关与sizeof那些事儿
12 使用sizeof计算普通变量所占空间大小 (1)不同数据类型所占字节数不同(32位 64位系统不同) int----->4 double----->8 char-------> ...
随机推荐
- 30张图说清楚 TCP 协议
大家好,我是风筝 前两天分享了 20张图说清楚 IP 协议 今天,继续来网管的自我修养之TCP协议,这可是除 IP 协议外另一个核心协议了. TCP 协议是网络传输中至关重要的一个协议,它位于传输层. ...
- C++ 猜数字
#include <iostream> #include <random> #include <limits> namespace random { std::ra ...
- 深入理解 python 虚拟机:pyc 文件结构
深入理解 python 虚拟机:pyc 文件结构 在本篇文章当中主要给大家介绍一下 .py 文件在被编译之后对应的 pyc 文件结构,pyc 文件当中的一个核心内容就是 python 字节码. pyc ...
- 打工人都在用的AI工具(第二期)
更多精彩内容,欢迎关注公众号:数量技术宅,也可添加技术宅个人微信号:sljsz01,与我交流. 上周更新的打工人都在用的AI工具(第一期)收到了小伙伴们的高度好评,于是很多小伙伴们急急忙忙的催更,技术 ...
- CANN训练:模型推理时数据预处理方法及归一化参数计算
摘要:在做基于Ascend CL模型推理时,通常使用的有OpenCV.AIPP.DVPP这三种方式,或者是它们的混合方式,本文比较了这三种方式的特点,并以Resnet50的pytorch模型为例,结合 ...
- 在英特尔 CPU 上加速 Stable Diffusion 推理
前一段时间,我们向大家介绍了最新一代的 英特尔至强 CPU (代号 Sapphire Rapids),包括其用于加速深度学习的新硬件特性,以及如何使用它们来加速自然语言 transformer 模型的 ...
- PopupWindow点击空白区域消失
下面三个条件必须要有,要在popupWindow显示之前调用popupWindow.setOutsideTouchable(true);popupWindow.setFocusable(true);p ...
- day04-商家查询缓存03
功能02-商铺查询缓存03 3.功能02-商铺查询缓存 3.6封装redis工具类 3.6.1需求说明 基于StringRedisTemplate封装一个工具列,满足下列需求: 方法1:将任意Java ...
- extend笔记
JavaScript面向对象 继承extend 1. 概念(主要用途) 将子类中的共性代码 ( 属性和方法 ) 抽取出来 放到父类中 每当有一个新的子类需要用到共性的属性或者方法时 不需要在自己内容复 ...
- [Pytorch框架] 2.5 循环神经网络
文章目录 2.5 循环神经网络 2.5.1 RNN简介 RNN的起因 为什么需要RNN RNN都能做什么 2.5.2 RNN的网络结构及原理 RNN LSTM GRU 2.5.3 循环网络的向后传播( ...