COM的本质是接口,在C++中是用纯虚类实现的,那么它是怎么保证虚函数调用的性能的?
我知道DirectX是用COM实现的,这应该要求极高的性能吧?
这种性能的实现是依赖特定的编译器吗?望各位高手指点一二, 谢谢!

解决方案 »

  1.   

    Java里除了private、final和static函数,其他的全都是虚函数,按照楼主的理解,Java程序员可怎么活啊?:P
      

  2.   

    先谢过大侠了!我已经讲了是实时图像学领域, java在这方面并不擅长吧?!
      

  3.   

    java不行,COM还可以,如果虚函数超过一定的层数,性能会很低,但是DirectX的都不是很深
      

  4.   

    偶还是觉得虚函数对效率的影响甚微。首先,函数调用就比直接的代码拷贝效率低,但为了模块化、过程化的要求,我们不得不编写大量的函数,而不是把所有功能写在尽量少的函数里,然后每个函数都有上万行。既然函数调用的开销都能忍受,那为什么不能忍受虚函数呢?通过虚表指针的一次间接寻址所带来的额外开销,我感觉总比调用一个函数本身的开销低得多吧。
    还有,有时无非也是一些折衷吧,COM有可以分模块独立升级的好处,一般dll未必可以。
      

  5.   

    既然函数调用的开销都能忍受,那为什么不能忍受虚函数呢我确实不太能忍受函数的开销, 我最在意的的是不能内联的开销,因为那是一个
    帧渲染函数的调用, 若不能内联就不太完美了:)不过我看过一本书有关3D引擎也是用了COM的思想,用了接口,我其实也可以接受的
    只是希望有更好的解决方案唉, 看来可维护性和性能确实太难调和了
      

  6.   

    嘿嘿,还可以了,以前Pentium II的年代,CPU那么慢,大家还不是照样玩3D?:P