金山面试:虚函数的效率问题

wjb_yd 2008-10-31 12:06:13
加精
今天参加金山二面,面试官问道为什么虚函数效率低

我答的比较浅,被bs

后来请教面试官,他说跟cpu流水线执行效率有关,哪位朋友帮忙解释一下,到底是怎么回事,为什么涉及到了流水线?
...全文
11230 335 打赏 收藏 转发到动态 举报
写回复
用AI写文章
335 条回复
切换为时间正序
请发表友善的回复…
发表回复
Luo_Bryant 2012-10-21
  • 打赏
  • 举报
回复
[Quote=引用 331 楼 的回复:]

我觉得考官正好前一天看书看见了。。来问问
[/Quote]
我也觉得,哈哈。。。
Luo_Bryant 2012-10-21
  • 打赏
  • 举报
回复
虚函数需要一次间接的寻址
「已注销」 2012-08-30
  • 打赏
  • 举报
回复
面过游戏的 当时面试问的比较庞杂 什么都有 但是基本都是平时面试遇到的题目 没有太多独创性的 可能也是主要考察基础吧
BYD123 2012-08-21
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 的回复:]

楼主以后你要是遇到这种考官,你和他谈与非逻辑门,硅锗原子的组成和爱因斯坦相对论对虚函数的影响,绝对震惊四座!
[/Quote]
+1
cjc_729 2012-07-19
  • 打赏
  • 举报
回复
看得有点晕。。
早恋 2012-06-13
  • 打赏
  • 举报
回复
我觉得考官正好前一天看书看见了。。来问问
y___myc 2012-05-26
  • 打赏
  • 举报
回复
请教一下哈、虚函数为什么会效率低啊,不是在动态多态性方面,虚函数不是很好用么?为什么会效率低啊? 本人初学者,请多多指教,O(∩_∩)O谢谢
lijh_402 2012-05-07
  • 打赏
  • 举报
回复
学习了,好好顶上
interim2012 2012-05-01
  • 打赏
  • 举报
回复
好帖

学习了。
唛头 2012-05-01
  • 打赏
  • 举报
回复
先拿了积分再看
super_admi 2012-04-30
  • 打赏
  • 举报
回复
嗯。我来稍微总结一下大家的答案吧。

被问到这个问题时,

第一层次:和面试官谈谈虚表和函数指针的问题。这个是应用层上的,谈这个我想任何人都没有意见吧?

如果面试官不满意,则继续……

第二层次:和面试官谈谈jump类和call指令问题。这里就涉及到一些硬件的东西了,问题集中在预读失效,流水线被破坏。

如果面试官不满意,则继续……

第三层次:“虚函数可能会引起二极管反向击穿,并引起PN结的各种问题,以及电子漂移现象”。关于这个,我记得有一个4月1日的“软件导致CPU在短时间内发生大规模电子漂移,而使得CPU成为一颗炸弹”故事,这个可以做为例证。

如果面试官不满意,则继续……

第四层次:与非逻辑门,硅锗原子的组成和爱因斯坦相对论对虚函数的影响。

日过面试官仍然不满意,你可以拍拍屁股走人了。
lf4512487 2012-04-12
  • 打赏
  • 举报
回复
hjjao[jk[k[ak[
rrlqq1314 2012-04-06
  • 打赏
  • 举报
回复
学习下
pcliuguangtao 2012-03-28
  • 打赏
  • 举报
回复
[Quote=引用 84 楼 codewarrior 的回复:]
和流水线相关是说得通的,究其原因还是因为存在动态跳转,这会导致分支预测失败,流水线排空。

设想一下,如果说不是虚函数,那么在编译时期,其相对地址是确定的,编译器可以直接生成jmp/invoke指令;
如果是虚函数,多出来的一次查找vtable所带来的开销,倒是次要的,关键在于,这个函数地址是动态的,譬如
取到的地址在eax里,则在call eax之后的那些已经被预取进入流水线的所有指令都……
[/Quote]

分支预测失败,命中率,虚函数表,这就是关键词
qingtianweichong 2012-03-26
  • 打赏
  • 举报
回复
学习一下,顺便鄙视一下面试官!
mm11214014 2012-02-17
  • 打赏
  • 举报
回复
这个,个人感觉回答到虚函数表这一层就可以了吧。。
cpu流水线执行效率,坑爹呢~
lucky-lucky 2012-01-01
  • 打赏
  • 举报
回复
我刚又学到了一点,愚笨了
JiangXiang 2011-12-30
  • 打赏
  • 举报
回复
mark
a2392579795 2011-12-29
  • 打赏
  • 举报
回复
[Quote=引用 94 楼 vicross 的回复:]

引用 13 楼 jackzhhuang 的回复:
楼主以后你要是遇到这种考官,你和他谈与非逻辑门,硅锗原子的组成和爱因斯坦相对论对虚函数的影响,绝对震惊四座!


到时候再加"1 + 1 = 2"猜想一定更雷人!!!

看来金山最近使用汇编来开发东西的哦! 怪不得效益越来越差
[/Quote]
做安全的一定要会汇编的
gaochizhen33 2011-11-23
  • 打赏
  • 举报
回复
学习了 个人感觉还是因为其中多了一步在虚函数表中查找地址的原因。扯到流水线上说明不是大牛就是大装B了
加载更多回复(315)
【重要提示】本资源设置为0积分下载,若非0积分请勿轻易下载 亲爱的CSDN用户: 首先感谢你点进这个资源页面。我需要提前说明一个重要情况: 本资源原本已设置为“0积分下载”,即作者希望完全免费共享。但CSDN平台有时会根据文件的下载热度、文件大小、用户权限等因素,自动将部分资源的积分调整为非0数值(如1积分、2积分、5积分等)。这是平台系统的自动行为,而非作者本人的设定。 因此,如果你当前看到该资源的下载所需积分不是0(例如显示为1、2、3……),请谨慎决定是否下载。 如果你按照非0积分支付并下载后发现资源内容不符合预期、链接失效,或者实际上该资源本应是免费的,作者无法为此承担积分损失或退还操作。强烈建议:仅在页面显示为0积分时进行下载。 另外,本资源描述中并未直接提供具体的下载地址或外部链接,因为它本身是一个通过CSDN官方上传通道提交的文件/内容包。如果你看到描述中没有外部网盘地址,这是正常的——资源文件应通过CSDN内置的“下载”按钮获取。若因平台积分显示异常导致你支付了积分,请优先联系CSDN客服咨询积分退还政策,作者没有权限修改平台自动设定的积分值。 感谢你的理解与支持。技术分享本应开放,但受限于平台规则,特此提醒如上。祝学习进步!

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧