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

今天粗略测试了一下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的拷贝也比较低效。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值