面试题:为什么C++的虚函数要比非虚函数执行的要慢?

芦苇荡 发布于 2012/11/21 15:26
阅读 4K+
收藏 2

一个面试题,金山的。

考官最后说了虚表 ,CPU流水线什么的

在这里求一个好理解的答案

以下是问题补充:

@芦苇荡:看了回复,发现大家都在喷C++,喷的我满脸都是。 (2012/11/21 22:39)
加载中
0
宏哥
宏哥

其实对于 C++的问题, 有个很好的解决方法. 

直接在简历上去掉C++的部分, 就说只会C. 就可以避开C++那些上帝都搞不清楚的特性. 

当然, 你如果非要用C++, 你就花费10年去搞那些特性把.

实际上,没有什么玩意非得用C++做的.

最终的产品线,是否赚钱, 才是决定技术前途的真正原因.


U_Itachi
U_Itachi
不会就别回,不喜请别喷,别占着茅坑不拉屎,挂着羊头卖狗肉
0
Jooooooker
Jooooooker

你看你看 楼上又来答非所问恶心人了。

函数是属于类的,如果你使用的是父类继承来的虚函数实现,需要保证父类那部分代码也在内存中,而非虚函数或者你自定义过的虚函数属于子类在内存中的可能显然要大一些,so。

hanxh
hanxh
我觉得说的很有道理,就应该是如此啊。所谓cache locality吧?
Jooooooker
Jooooooker
回复 @小郭一号 : 那麻烦你说一下?
小郭一号
小郭一号
是不是恶心人不知道,你的答案完全是胡说八道
0
小耶果
小耶果
早绑定和晚绑定的区别.固定jump和查表的区别-- 深度探索C++对象模型,搞懂了对C++用来写库或系统软件(比如杀毒什么注重效率),什么的有帮助.搞应用的没多大帮助.话说Java所有方法都是虚的呢,但并不妨碍搞她赚大钱.
中山野鬼
中山野鬼
回复 @小耶果 : 哈。这个是大实话。想研究C++的就研究。C++的效率也不低,但是要想结合硬件体系谈优化,还是老实的去用C吧。用C++真的很无聊。
hanxh
hanxh
回复 @小耶果 : 应该是有关系吧。如果在父类那个表里面,有较大概率和本表不在一页。这样code cache失效概率大。
小耶果
小耶果
我见过很多技术面试官,他们以在面试者面前显摆为荣,至于如何为公司找到合适的人才早就丢在脑后也没兴趣.
小耶果
小耶果
非要说有些关系确实有,必经较多较长的指令不利益指令的cache和副作用的预判.但是我想说的是关心这个还不如把OO学学好,关心流水线的这个级别你考官可能都没达到,只有CPU的指令和架构设计才会考虑.其他人就不要过多在这里瞎操心.
芦苇荡
芦苇荡
可是这没和cpu流水线联系起来啊
0
宏哥
宏哥

引用来自“Jooooooker”的答案

你看你看 楼上又来答非所问恶心人了。

函数是属于类的,如果你使用的是父类继承来的虚函数实现,需要保证父类那部分代码也在内存中,而非虚函数或者你自定义过的虚函数属于子类在内存中的可能显然要大一些,so。

搞清这个问题有意义吗? 

路上有个坑, 有人踩过去了. 你如何学习前辈经验呢?

是踩过去 还是 绕过去?

T
Trankil
回复 @宏哥 : 新手刚踩上这个坑,觉得C++ 和 JAVA都还可以啊,C++确实有点难用....不过那么多人都在用,学一学也无妨吧
岛
宏哥对于c++的厌恶已经偏于宗教形式了
johnzhang68
johnzhang68
“GCC要用C++来重构一遍”, 这个说的不确切。只是一个分支而已。而且不是主干。有人喜欢做就做了,并不能说明谁用了某种语言,这种语言就比另外一种好。
SeekerLee
SeekerLee
回复 @宏哥 : 此处取决于面试官
小郭一号
小郭一号
回复 @Jooooooker : 学习态度是对的,不过业务确实不精。我认为考C++答出虚函数表和运行时查找就可以得满分了,扯到CPU级别,说明程序肯定不适合用C++(我也不懂)
下一页
0
吃土的汉子
吃土的汉子
如果面试你说你会C++,那么你必须看完两本书,一本叫《C++ Primer》,另一本叫《Inside the C++ Object Model》,从标题来看,你是没有看过后面一本书所以会有此疑问
gouchangxing
gouchangxing
thinking in C++
吃土的汉子
吃土的汉子
回复 @梦断牛背山 : 已经很久很久没看书了,怕误人子弟。装死~~~~
芦苇荡
芦苇荡
回复 @子不语怪力乱神 : 说说你的理解也行。。。,说说吧
芦苇荡
芦苇荡
回复 @子不语怪力乱神 : 请赐教。不是我不想翻书,已经翻了几天了,给资料链接也行。
吃土的汉子
吃土的汉子
回复 @梦断牛背山 : 自己找书去,CPU流水线可以参考《深入理解计算机系统》。这题目去年面试被问了N次都问烂了
下一页
0
mental
mental
微软说switch比虚函数快,又是什么cpu流水命中, 所以它的消息机制采用了一堆case. 不过我觉得一般编程在现在的硬件条件下,开发效率和架构放在第一位,我选择虚函数,而且别少看编译器的优化
0
宏哥
宏哥

回复 @小耶果 : 回复 @小郭一号 :  ,

这种类型的面试, 早先我也经历过. C++的,Java都有. 常常被问到一些晦涩艰深的东西, 我都答不上来, 幸亏我答不上来, 就没有做那些工作. 

不过有点小悲剧的是, 我还真的很认真去研究了别人考倒我的东西,  还以此为目标过.

现在回过头去看, 都TMD扯淡的玩意,只有玩弄嘴皮子的人,做不出玩意的人,才对那些玩意有兴趣.

现在要是有人问我, C++, JAVA, 我就两个字:

不懂


小耶果
小耶果
话糙理不糙,只有在行业中历练过才知道其中的道理.只是有时候实话不一定实说,实说了懂行的人自然懂,不懂的人觉得刺耳.而且搞技术的都有技术至上论,而这点恰恰在国内要不得(指普遍情况,做到技术世界第一不算)
南湖船老大
南湖船老大
你确实不懂,靠运气拿了个高薪而已,天天得瑟
mental
mental
回复 @宏哥 : 多少说出来你有意义呢? 少了你就可以yy , 多了你又会找其它喷. 真的给我说中了...
宏哥
宏哥
回复 @mental : < 5k. 你不会超过这个层次.
mental
mental
回复 @宏哥 : 从你语气我知道就被我说中了...
下一页
0
宏哥
宏哥

我可以肯定的说, 

面试问这种问题的职位, 层次都很低.

对于资深软件工程师, 会不会虚函数, 没有区别.  

问这种问题的人, 自身层次就不高.

0
宏哥
宏哥

技术层次越低的面试, 越是会问 C++ 虚函数, 友元, 继承,多态...............................

技术层次上去了, 就直接问, 特定问题的解决方案是....

更上层, 就是, 你做过什么... 

再上去, 合作模式....

根本不需要那么多啰嗦.

iHuHoo
iHuHoo
回复 @宏哥 : 我做C++开发也6年+了,不是玩。做技术的首先要对技术有敬畏之心,在简单的一个技术你也无法100%搞懂,搞完全,所谓小曲好唱唱好了也难。我从来不喜欢参与这种无聊的争论,不要整天在这里喷,这个层次不高,那个是浪费声明;出口业务,闭口商业。你真的要是达到了那个层次,也没有时间整天在这里喷口水。真是一天表单、模版、数据库搞的蛋疼了吧!
宏哥
宏哥
回复 @iHuHoo.W : 不信就去玩C++, 没有空和你争. 生命是自己的, 决定权在自己手上.
iHuHoo
iHuHoo
好吧,你去面试个应届毕业生,跟他谈,我们怎么合作!艹
小耶果
小耶果
回复 @johnzhang68 : 宏哥的意思是只招C++的公司都是垃圾,不要去.呵呵.
johnzhang68
johnzhang68
很多招聘广告写明了要C++, OOAD, OOP什么的。你只会C怎么能够让人给你面试机会呢?
下一页
0
南湖船老大
南湖船老大

引用来自“宏哥”的答案

我可以肯定的说, 

面试问这种问题的职位, 层次都很低.

对于资深软件工程师, 会不会虚函数, 没有区别.  

问这种问题的人, 自身层次就不高.

宏哥啊,你还是老实点吧,天天喷也不嫌累啊。。。

动不动就没必要,这个垃圾,那个垃圾,学这没用学那不行。。就知道死忠PHP和PostgreSQL,看到其他东西就要开喷。

返回顶部
顶部