C++面试八股文:了解sizeof操作符吗?

这篇具有很好参考价值的文章主要介绍了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?

面试官:好的,回去等通知吧。

让我们复盘以下今日二师兄的表现。

内存对齐的原则是什么,为什么要内存对齐?

主要有以下原则:

  1. 结构体变量的首地址是其最宽基本成员类型大小的整数倍。
  2. 结构体每个成员相对于结构体首地址的偏移量都是成员大小的整数倍。
  3. 结构体的总大小为结构体最宽基本成员类型大小的整数倍。

因为性能。为了缓存友好(Cache friendly)。这是一个很大的话题,咱们今天聊不了太多。

sizeof(空结构体)的结果是多少?

这里在C中是0,在C++中是1。C++标准规定,不同的对象不能拥有相同的内存地址。 如果空类大小为0,类的对象数组中的每个对象都拥有了相同的地址,这显然是违背标准的。

对只有一个函数的类进行sizeof运算结果是多少?

这里也是一个坑。要看这个函数是不是虚函数。如果不是虚函数,则结果是1,如果是虚函数,则大小是4或者8。

聪明的小伙伴,提到4或者8.就应该知道是怎么回事了吧?

好了,今日份面试到这里就结束了,小伙伴们,对于今天二师兄的面试,能打几分呢?如果是你,以上的问题都能回答的上来吗?

关注我,带你21天“精通”C++!(狗头)文章来源地址https://www.toymoban.com/news/detail-477318.html

到了这里,关于C++面试八股文:了解sizeof操作符吗?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C++面试八股文:技术勘误

    不知不觉,《C++面试八股文》已经更新30篇了,这是我第一次写技术博客,由于个人能力有限,出现了不少纰漏,在此向各位读者小伙伴们致歉。 为了不误导更多的小伙伴,以后会不定期的出勘误文章,请各位小伙伴留意。 在《C++面试八股文:C++中,设计一个类要注意哪些东

    2024年02月11日
    浏览(50)
  • 面试八股文攻略(五)—— 操作系统

    进程管理:进程是计算机中最基本的资源,操作系统负责进程的创建、销毁、调度和同步。 内存管理:操作系统负责分配和管理内存资源,保证程序能够正常运行。 文件系统管理:操作系统负责文件的创建、管理和访问,提供文件的读写接口。 设备管理:操作系统负责管理

    2024年02月03日
    浏览(45)
  • C++面试八股文:如何避免死锁?

    某日二师兄参加XXX科技公司的C++工程师开发岗位第31面: 面试官:什么是锁?有什么作用? 二师兄:在C++中,锁(Lock)是一种同步工具,用于保护共享资源,防止多个线程同时访问,从而避免数据竞争和不一致。 面试官:有哪些锁? 二师兄:从种类上分,可以分为普通锁、

    2024年02月12日
    浏览(50)
  • C++面试八股文:什么是智能指针?

    某日二师兄参加XXX科技公司的C++工程师开发岗位第19面: 面试官:什么是智能指针? 二师兄:智能指针是C++11引入的类模板,用于管理资源,行为类似于指针,但不需要手动申请、释放资源,所以称为智能指针。 面试官:C++11引入了哪些智能指针? 二师兄:三种,分别是 s

    2024年02月09日
    浏览(44)
  • C++面试八股文:什么是构造函数?

    某日二师兄参加XXX科技公司的C++工程师开发岗位第29面: 面试官:什么是构造函数? 二师兄:构造函数是一种特殊的成员函数,用于创建和初始化类的对象。构造函数的名称与类的名称相同,并且没有返回类型。构造函数在对象被创建时自动调用。 面试官:什么是默认构造

    2024年02月11日
    浏览(47)
  • C++面试八股文:用过STL吗?

    某日二师兄参加XXX科技公司的C++工程师开发岗位第21面: 面试官:用过STL吗? 二师兄:(每天都用好吗。。)用过一些。 面试官:你知道STL是什么? 二师兄:STL是指标准模板库( Standard Template Library ),是C++区别于C语言的特征之一。 面试官:那你知道STL的六大部件是什么

    2024年02月09日
    浏览(48)
  • C++面试八股文:什么是RAII?

    某日二师兄参加XXX科技公司的C++工程师开发岗位第13面: 面试官:什么是 RAII ? 二师兄: RAII 是 Resource Acquisition Is Initialization 的缩写。翻译成中文是资源获取即初始化。 面试官: RAII 有什么特点和优势? 二师兄:主要的特点是,在对象初始化时获取资源,在对象析构时释放

    2024年02月08日
    浏览(57)
  • C++面试八股文:聊一聊指针?

    某日二师兄参加XXX科技公司的C++工程师开发岗位第17面: 面试官:聊一聊指针? 二师兄:好的。 面试官:你觉得指针本质上是什么? 二师兄:这要从内存地址开始说起了。如果有一块容量是1G的内存,假设它的地址是从 0x00000000 到 0x3fffffff ,每一个字节都对应一个地址。当

    2024年02月09日
    浏览(39)
  • C++面试八股文:如何实现一个strncpy函数?

    某日二师兄参加XXX科技公司的C++工程师开发岗位第31面: 面试官: strcpy 函数使用过吧? 二师兄:用过。 面试官:这个函数有什么作用? 二师兄:主要用做字符串复制,将于字符从一个位置复制到另一个位置。 面试官: strncpy 函数也使用过吧,和 strcpy 有何不同? 二师兄:

    2024年02月11日
    浏览(53)
  • C++面试八股文:std::deque用过吗?

    某日二师兄参加XXX科技公司的C++工程师开发岗位第26面: 面试官: deque 用过吗? 二师兄:说实话,很少用,基本没用过。 面试官:为什么? 二师兄:因为使用它的场景很少,大部分需要性能、且需要自动扩容的时候使用 vector ,需要随机插入和删除的时候可以使用 list 。

    2024年02月11日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包