Le C++ et C normes les feuilles d'un bouquet de liberté pour les compilateurs. Les compilateurs sont libres de compter jusqu'à 1 milliard de dollars entre chaque instruction, ou de le faire seulement si un nombre entier est un nombre premier de valeur en elle.
Décent "réel" compilateurs ne pas le faire. C'est une qualité de mise en œuvre de problème.
Inline fonction des objets en quelque chose qui ressemble std::sort
est quelque chose que chaque véritable compilateur ne. Il est extrêmement facile de détecter ce qui doit être incorporé dans ces cas, parce que les informations de type porte le code nécessaire pour être incorporé.
De le faire avec un pointeur de fonction est plus difficile. De le faire avec un pointeur de fonction où tout a été converti en void*
ou char*
des pointeurs est encore plus difficile.
L'effet de ceci est que, dans la pratique, un style C appel d' qsort
vs C++-style appel à l' std::sort
peut entraîner un grand avantage pour l' std::sort
.
qsort
est environ 2x plus lent que l' std::sort
, comme le montre ici, dans un ridiculement simple situation de tri disposées de façon aléatoire des nombres entiers.
L'inspection de l'assemblage de code de sortie est principalement un détail, et c'est beaucoup de travail pour peu de retour. La prise en béton exemples du monde réel vous donne une idée de l'importance de l'impact est vraiment.
Tous les 3 de clang, gcc et MSVC où en mesure de faire std::sort
être nettement plus rapide que leur qsort
. Et comme c'est facile d'optimisation, tout en optimisant les pointeurs de fonction en inline appels n'est pas, vous vous attendez à moins principaux compilateurs ne valait pas mieux que ce à qsort
.