Timings retrieved on Pentium4 3.2Ghz
g++ version: 4.4.2-9 debian
boost 1.40.0-6 debian
sigc: 2.2.4.2-1 debian
flags: -O3 -march=native
Class CCallback definited as:
class CCallback {
public:
virtual ~CCallback() {}
virtual void operator() () = 0;
};
Time | Flexibility | Native Multicast |
object size | ||
Reference |
foo(); |
2.9ns | Low | 0 bytes | |
Function pointer |
void (* proc)(void); |
3.9ns | Medium | 4 bytes | |
callback class |
class CPtrFunCallback: public CCallback { |
7.7ns | Hi | no |
4Bytes + 8 bytes (HEAP) + N vtable |
callback class (template) |
template<void (* T)(void)> |
6.5ns | Hi | no |
4Bytes + 4 bytes (HEAP) + NxM vtable |
boost::function |
boost:function<void ()> |
12.9ns |
Hi |
no |
16 bytes 4xN Additional Fn, 1 typeinfo if boost::bind is used |
boost::signal |
boost::signal<void ()> |
200.0ns | Very Hi | yes |
20 bytes + 322 bytes (HEAP) + ? |
sigc::signal |
sigc::signal<void> |
136.8ns | Very Hi | yes |
8 bytes + 96 bytes (HEAP) + temporary 16 bytes (HEAP) per call |