当一个计算机专业的我被知乎大佬怼过之后...

第一次被知乎大佬怼,心情很微妙~

关注我公众号的朋友,应该知道我前一阵发了篇面试总结,就是下面这个。

史上最全的C++/游戏开发面试问题总结(一)——C++基础

最近我把它转到了知乎上。没过两天我就看到了一个比较特别的评论,只有一个链接加一个请字,感觉来者不善。果然,点进去一看是一个大佬的文章,明晃晃的标题如下

我这心态相当好,人家不让我总结,我当然得看看原因。为了方便大家看,我就把内容搬过来吧。

我的问题总结

问:inline的优劣(提问概率:★★)
优点:减少函数调用开销 
缺点:增加函数体积,exe太大,占用CPU资源,可导致cache装不下(减小了cache的命中) ,不方便调试debug下一般不内联, 每次修改会重新编译头文件增加编译时间 
注意:inline只是一个请求,编译器有权利拒绝。有7种情况下都会拒绝,虚调用,体积过大,有递归,可变数目参数,通过函数指针调用,调用者异常类型不同,declspec宏等 
forceinline字面意思上是强制内联,一般可能只是对代码体积不做限制了,但是对于上面的那些情况仍然不会内联,如果没有内联他会返回一个警告。 构造函数析构函数不建议内联,里面可能会有编译器优化后添加的内容,比如说初始化列表里面的东西。

大佬的评论:

  1. inline 的优点绝对不止减少函数调用开销这么简单。我认为最大的好处是内联后编译器可以知道更多的信息从而进行更多的优化,C++、Rust 的 zero-overhead abstraction 都很大程度上依赖内联,例如 map().filter() 优化成裸循环,可以参考:看看所谓的 Zero cost abstraction ,这里不再赘述

  2. 现代编译器(或者说链接器?)都装备了 LTO,链接时也可以内联。也就是说,我把定义写在 cpp 里也可以在链接的时候内联,那么 “每次修改会重新编译头文件增加编译时间 ”这条实际上也是错的

  3. 编译器会拒绝全部的虚调用也是错的,可以看这里,其中 Fuck 是虚函数,但是编译器还是内联了。devirtualization 了解一下:http://blog.llvm.org/2017/03/devirtualization-in-llvm-and-clang.html

  4. 至于构造函数析构函数不建议内联,里面可能会有编译器优化后添加的内容,比如说初始化列表里面的东西。我感觉已经不知所云了。建议观看 https://www.youtube.com/watch?v=Qq_WaiwzOtI 

主要是针对内联函数的更多与编译器相关的细节进行反驳~如果你看不懂也别急,毕竟是大佬的点评,后面我会再写一篇文章帮大家简单分析一下。你也不用因此而担心找不到工作,因为除非你说你自己精通C++,否则面试官一般不会扣到这个程度。当然,肯定也有很多面试官也看不懂2333

这篇文章除了标题有点嘲讽以外也没有什么言语不妥,我没什么好争论的,毕竟技术上的东西能叫怼么?我不怕暴露自己的真实水平,因为大家都是从菜鸟过来的。我大部分的C++知识都来源于《C++ Primer》《Inside the C++ Object Model》《Effctive C++》《More Effctive C++》《C++ Template》《The Design and Evolution of C++》《STL源码剖析》这几本书(还有一些可能已经过时的博客),确实没怎么关注过编译器的领域以及C++语言的发展。(毕竟一个虚幻引擎就可能够我玩几年了。。。)

大概两年前的时候,作为一个真菜鸟的我就在知乎上看到过各个C++大佬的回答与评论,可以说是完全看不懂,感觉从来没学过C++一样。当时我就想什么时候也能和大佬们谈笑风生?过了两年,虽然进步很大,但也只是能看懂大部分问题了,“谈笑风生”还是遥遥无期。

我关注了大佬的这个专栏less is more(里面有多个作者),看到了一两年前我也看过却看不懂的文章。不过这次我发现了一些新的东西,其中有两篇文章分别描述了一个计算机专业大佬的大学四年生活与一个普通大学生的四年生活,而我发现我就是那个普通大学生。

大佬的大学生活:

入学前就开始接触与学习编程、算法;

开学开始研究图书馆的书籍分布;

大一加入实验室;

大二做项目,开始深入学习语言,写博客与帖子,参加开发者大会;

大三直接拿到一些企业的Offer,去大公司实习;

我的大学生活:

入学前使劲放松,对计算机一窍不通;

开学时各种兴奋,除了上课时间好好听课,其他时间就刷刷人人,看看剧;

大一参加各种社团活动,忙的不亦乐乎;

大二继续参加各种活动,不过稍微学习了一点计算机基础知识,可以写个窗口程序了;

大三觉得该收收心,认真学点计算机专业的知识了,加个实验室试试;

优秀的人真的会越来越优秀,那些从小受到比较好的教育的学生与普通学生的差距不是一般的大。我刚进大学那时连PPT(单纯技术上说)都觉得是高大上到不行的东西,人家初中可能看完了C++Primer了。没办法,你只能通过努力去缩小这个差距。

大部分人都是普通人,从一个计算机专业的学生来说,我们确实都不太合格。不过你可能在踏入这个行业的时候,才会意识到你在这个方向的能力的重要性又会像高中学习似的被无限放大。因为你要靠这个吃饭~

当然,程序猿的生活不只有代码。我们也爱打球、玩音乐、追剧、跳舞,只不过当我们想要在技术上达到炉火纯青的地步时,不得不放弃一些我们的爱好。自律,这应该是一个大佬必备的基本素质吧~


有一天我也可能坐在面试官的位置上,把眼前一个职场萌新怼的体无完肤,但是希望不会是看完这篇文章后的你们。

想想挺无奈的,总觉得这一切好像已经被人安排好了~

当一个计算机专业的我被知乎大佬怼过之后..._第1张图片

往期文章:

史上最全的C++/游戏开发面试问题总结(二)——虚函数、内存、STL

史上最全的C++/游戏开发面试问题总结(一)——C++基础

知乎文章链接:

https://zhuanlan.zhihu.com/p/47869981

你可能感兴趣的:(当一个计算机专业的我被知乎大佬怼过之后...)