fast delegates



  • Es gibt auf Codeproject mehrere Artikel wie diesen hier:

    http://www.codeproject.com/Articles/11015/The-Impossibly-Fast-C-Delegates

    Einige sind da glaub ich auch verlinkt. So ganz aktuell ist es aber wohl nicht, der Artikel ist von 2005. Wie schaut es heutzutage damit aus? Wie schaut es im Vergleich dazu mit std::function aus den gängigen C++11 Implementierungen aus? Und da wir in der Arbeit noch kein C++11 verwenden, würde mich mal interessieren, ob boost::function hier mit älteren Compilern (VS2008-2010) mittlerweile ebenfalls etwas optimiert hat. Hat sich das mal jemand genauer angeschaut?



  • Mir wäre nicht bekannt dass boost::function überhaupt irgendeine besondere "fast delegate" Optimierung verwendet. boost::function hat ausreichend Speicher für nen "this" + Member-Function-Pointer direkt im Objekt eingebaut, um new() für so einfache Fälle zu vermeiden. Das war's dann soweit ich weiss aber auch schon.



  • Es ist keine grosse Erkenntnis das std::function und boost::function langsam sind, die können auch deutlich mehr.

    Stand der Technik ist, dass es immer noch nicht wirklich effizient geht: http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2013/n3574.html

    Was den codeproject-Artikel angeht, ein einfaches bind1st kannst du dir auch selber schreiben, function pointer + 1. Argument speichern. So erspart man sich dynamischen Speicher, dispatch und erlaubt inlining. Wirklich schneller geht es nur mit Compilerunterstützung (daher das Proposal).

    Ist aber kein wirkliches Problem, wenn Performance wichtig ist, macht man ein Template draus und inlined alles. Und wenn Performance nicht wichtig ist, dann kann man auch std::function verwenden...


Anmelden zum Antworten