代码之家  ›  专栏  ›  技术社区  ›  Kornel Kisielewicz

boost::函数运行时性能

  •  7
  • Kornel Kisielewicz  · 技术社区  · 15 年前

    我正在为动态加载的库实现一个独立于平台的包装器。当然,当我从库中加载函数时,我需要将它们存储为指针以备将来使用。我想用boost::function来代替普通的函数指针。当然,这会增加编译时间,但这不是我害怕的。而是:

    当boost::function 打电话 存储的函数?有吗?它有多大?

    我想我在不时调用这样的函数时不会有太多开销,但是,被频繁调用的函数呢?(极端的例子, glVertex 在加载的总账库中)。会对表演造成多大的伤害?

    震源潜水助推没有回答太多:>。

    如果它依赖于编译器,我主要对GCC和MSVC感兴趣。

    2 回复  |  直到 15 年前
        1
  •  5
  •   Nick Bastin    15 年前

    如提振中所述 documentation ,调用 boost::function 在大多数情况下,通过函数指针进行一次调用会产生成本。换言之,如果你无论如何都要使用函数指针,那就太简单了,你可以免费获得一系列增强的功能。

        2
  •  1
  •   Terry Mahaffey    15 年前

    boost::function使它成为tr1,所以它在现代编译器上是std::tr1::function,在 真正地 现代编译器。

    在任何情况下,正如您所观察到的,std::function都有非零的创建开销(包括创建对象的副本)。理论上,它的开销应该与原始函数指针的调用开销相同;也就是说,有一个级别的间接寻址——但真正聪明的编译器可以内联该级别的间接寻址。

    当然,有些东西可以存储在std::函数中,但它们不适合或存储在函数指针中。