我正在为动态加载的库实现一个独立于平台的包装器。当然,当我从库中加载函数时,我需要将它们存储为指针以供将来使用。我想过使用boost :: function来代替普通的函数指针。当然,这会增加编译时间,但这不是我所害怕的。更确切地说:
当调用存储的函数时,boost :: function引入了什么开销?有吗?它有多大?
我想在不时调用这些函数时我不会有太大的开销,但是,那些被调用的函数怎么样? (极端示例,加载的GL库上的glVertex
)。它对性能有多大影响?
源头潜水提升没有多少回答:>。
此外,如果它依赖于编译器,我主要对GCC和MSVC感兴趣。
答案 0 :(得分:5)
如Boost documentation中所述,在大多数情况下,调用boost::function
会导致通过函数指针进行一次调用。换句话说,如果你无论如何都要使用函数指针,它就是一个版本,你可以免费获得一堆增强功能。
答案 1 :(得分:1)
boost :: function使它成为tr1,所以它是现代编译器上的std :: tr1 :: function,而且只是上的std :: function 现代编译器。
无论如何,正如您所观察到的,std :: function的创建开销非零(包括创建对象的副本)。理论上,它应该具有与调用的原始函数指针相同的开销;即存在一个间接层 - 但真正聪明的编译器可以内联这个间接层。
当然,你可以存储在std :: function中的东西不能适合或存储在函数指针中。