小弟没学过COM,有一个关于COM性能的疑惑?望指点!

tseny 2005-05-08 12:24:03
COM的本质是接口,在C++中是用纯虚类实现的,那么它是怎么保证虚函数调用的性能的?
我知道DirectX是用COM实现的,这应该要求极高的性能吧?
这种性能的实现是依赖特定的编译器吗?

望各位高手指点一二, 谢谢!
...全文
121 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
晨星 2005-05-09
  • 打赏
  • 举报
回复
嘿嘿,还可以了,以前Pentium II的年代,CPU那么慢,大家还不是照样玩3D?:P
tseny 2005-05-09
  • 打赏
  • 举报
回复
既然函数调用的开销都能忍受,那为什么不能忍受虚函数呢

我确实不太能忍受函数的开销, 我最在意的的是不能内联的开销,因为那是一个
帧渲染函数的调用, 若不能内联就不太完美了:)

不过我看过一本书有关3D引擎也是用了COM的思想,用了接口,我其实也可以接受的
只是希望有更好的解决方案

唉, 看来可维护性和性能确实太难调和了
晨星 2005-05-09
  • 打赏
  • 举报
回复
偶还是觉得虚函数对效率的影响甚微。首先,函数调用就比直接的代码拷贝效率低,但为了模块化、过程化的要求,我们不得不编写大量的函数,而不是把所有功能写在尽量少的函数里,然后每个函数都有上万行。既然函数调用的开销都能忍受,那为什么不能忍受虚函数呢?通过虚表指针的一次间接寻址所带来的额外开销,我感觉总比调用一个函数本身的开销低得多吧。
还有,有时无非也是一些折衷吧,COM有可以分模块独立升级的好处,一般dll未必可以。
晨星 2005-05-08
  • 打赏
  • 举报
回复
Java里除了private、final和static函数,其他的全都是虚函数,按照楼主的理解,Java程序员可怎么活啊?:P
晨星 2005-05-08
  • 打赏
  • 举报
回复
虚函数调用的性能的确比一般函数低,但那也只是相对于一般函数,而并不是说虚函数总是会对效率造成不可收拾的影响啊。
C++语言的设计原则之一就是:以尽量小的效率牺牲换取大的灵活性。
按照我的理解,虚汗数调用只比非许函数多一次函数入口的寻址而已。一般函数的地址是静态的,说白了就是写死在可执行文件中,而虚函数调用是动态的,运行时间接寻址。
对于编译器依赖,我感觉不同的编译器实现虚函数的机制事实上都差不多,应该不会有太大的影响。
dawndu 2005-05-08
  • 打赏
  • 举报
回复
java不行,COM还可以,如果虚函数超过一定的层数,性能会很低,但是DirectX的都不是很深
tseny 2005-05-08
  • 打赏
  • 举报
回复
先谢过大侠了!

我已经讲了是实时图像学领域, java在这方面并不擅长吧?!
  • 打赏
  • 举报
回复
虚函数为你提供了灵活性,没有人强迫用,如果觉得要效率就别用。
比如:汇编效率高,直接寻址!
:)

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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