boost::bind效率上的注意事項

來源:互聯網
上載者:User

今天粗略測試了一下boost::bind的效能,得出以下幾個猜測(僅限於gcc,windows下未測試):

boost::function內部預留了(sizeof(成員函數指標) + sizeof(指標))的空間,所以如果bind的參數佔用空間小,則會使用placement new的方式,不會涉及動態記憶體分配。典型的情況如boost::bind(成員函數指標, 對象指標),或者全域函數指標加少量參數的情況。

這種實現方式類似fast delegate。

如果綁定的參數資料大小超出預留空間,則採用動態記憶體分配,此時效能會急劇下降。

若這樣的用法造成效能瓶頸,可以採用自訂空間配置器的辦法來解決:

http://www.boost.org/doc/libs/1_42_0/doc/html/boost_asio/example/allocation/server.cpp

 

2010.8.24補充:如果只是boost::bind(&func, x, y, z)()這種形式的調用,並不會new/delete,內部應該是用了meta programming技巧。但是如果把bind的結果賦值給function如 boost::function<> myfunc = boost::bind::(&func, x, y, z);內部會進行轉換,參數過多就會動態分配記憶體,而且function的拷貝也比較低效。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.