2010-01-02 143 views
7

我正在爲動態加載的庫實現平臺無關的包裝器。當然,當我從庫中加載函數時,我需要將它們存儲爲將來使用的指針。我想用boost :: function來代替普通的函數指針。當然,這會增加編譯時間,但這不是我所害怕的。相反:boost :: function運行時性能

什麼是由boost ::函數引入的開銷,當調用存儲的函數?有一個嗎?它有多大?

我想我不會有太多時間調用這些函數的開銷,但是,如何調用函數呢? (極端示例,加載的GL庫上的glVertex)。它會損害性能多少?

源潛水提升沒有回答太多:>。

另外,如果它依賴於編譯器,我主要對GCC和MSVC感興趣。

+0

答案是:它會傷害很多,不會使用它。 – user1095108 2013-07-21 11:26:35

回答

5

看一看here討論和比較各種功能包裝實現。

+0

這確實是一個非常有趣的比較! – 2010-01-02 00:32:50

+1

這篇文章是從2007年 - 它仍然是相關的? – Adrian 2011-07-26 20:38:55

+0

嗯,可能現在已經過時了0x現在的東西... – 2011-07-26 21:43:17

5

正如升壓documentation所述,在大多數情況下調用boost::function會通過函數指針調用一次調用的代價。換句話說,如果你將不得不使用函數指針,這是一種洗滌,並且你可以免費獲得一堆增強的功能。

1

boost :: function使它成爲tr1,所以它在現代編譯器上是std :: tr1 :: function,而在上只是std :: function真的是現代編譯器。

無論如何,正如您所看到的,std :: function對於創建(包括創建對象的副本)具有非零開銷。理論上,它應該和調用的原始函數指針具有相同的開銷;即有一個層次的間接 - 但真正聰明的編譯器可以內聯這種間接性。

當然,您可以將其存儲在std :: function中,但這些東西無法存儲或存儲在函數指針中。