Frais généraux de l'OLP

 

Dans le cadre d'une tâche exigeant beaucoup de ressources, une question s'est posée : quel est le surcoût de l'utilisation de la POO par rapport à la programmation procédurale classique ?

Quelqu'un a-t-il effectué de tels tests ?

Je suis intéressé par la différence entre :

  1. Appel de fonction avec paramètres
  2. Appel de fonction sans paramètres
  3. Appel de macro avec la fonctionnalité de la fonction ci-dessus
  4. Appel de fonction - méthode d'une classe
  5. Appel de fonction virtuelle

 

De quel type de frais généraux parlons-nous ?

Si nous parlons de code machine, pour autant que je sache, la fonction virtuelle appelle la procédure indirectement, par le biais de la table des fonctions virtuelles. Mais dans le cas de fonctions normales, c'est un appel direct. Je pense qu'il y a très peu de frais généraux.

Les frais généraux du programmeur sont beaucoup plus importants - écriture et maintenance du code, correction des bogues...

 

Les fonctions sans paramètres sont plus rapides que les fonctions avec paramètres.

 
Dmitry Fedoseev:

Les fonctions sans paramètres sont plus rapides que les fonctions avec paramètres.


Bien sûr, cela fait deux ans que je m'exprime en assembleur.) C'est vrai, pour les processeurs embarqués, mais le C++ reste du C++. Même une fonction sans paramètres a un prologue et un épilogue, qui prend également du temps.

Le moyen le plus rapide, bien sûr, est d'utiliser une macro conçue pour ressembler à une fonction. Il est dommage qu'il n'y ait pas de fonctions en ligne dans MQL, mais les macros sont un substitut de

 
George Merts:

De quel type de frais généraux parlons-nous ?

Si vous parlez de code machine, pour autant que je sache, la fonction virtuelle appelle la procédure indirectement, par le biais de la table des fonctions virtuelles. Et dans le cas de fonctions normales, c'est un appel direct. Je pense qu'il y a très peu de frais généraux.

Les frais généraux du programmeur sont beaucoup plus importants - écriture et maintenance du code, correction des erreurs...


Bien entendu, nous ne nous soucions pas de la surcharge du temps d'exécution - ces kilo-octets supplémentaires n'ont aucune importance. Nous ne nous soucions pas de ces kilo-octets supplémentaires.

 

Une macro serait bien sûr la plus rapide.

 
Alexey Volchanskiy:

Le moyen le plus rapide est bien sûr une macro conçue comme une fonction. Dommage, MQL n'a pas de fonctions en ligne, mais une macro pourrait être un substitut.

Rinat a déclaré que MT a une fonction en ligne sérieuse, et donne de bons résultats.

 
George Merts:

Rinat a déclaré que MT - un inliner sérieux fonctionne, et donne de bons résultats.


Oui, selon mes observations personnelles, dans MT4 le travail de l'inliner dépend de la taille de la pile (mémoire allouée pour les variables dans la pile) et du nombre de variables.
Mais dans MT5, la dépendance à la taille de la pile semble avoir été supprimée et l'optimiseur y est plus assistant en général.

 
Alexey Volchanskiy:

Dans le cadre d'une tâche exigeant beaucoup de ressources, une question s'est posée : quel est le surcoût de l'utilisation de la POO par rapport à la programmation procédurale classique ?

Quelqu'un a-t-il effectué de tels tests ?

Je suis intéressé par la différence entre :

  1. Appel de fonction avec paramètres
  2. Appel de fonction sans paramètres
  3. Appel d'une macro avec la fonctionnalité de la fonction ci-dessus
  4. Appel de fonction - méthode d'une classe
  5. Appel de fonction virtuelle

Si des bibliothèques de POO prêtes à l'emploi sont disponibles, cela réduit le temps de développement de l'application. La vitesse d'exécution peut être ralentie lors de l'appel de la fonction virtuelle.

La seule nuance est la disponibilité de bonnes bibliothèques OOP.

"Bibliothèque standard" viole mon sens de la beauté et me pousse à utiliser des DLL et à coder tranquillement en C++.


 
George Merts:

Rinat a dit que dans MT - un inliner sérieux fonctionne, et donne de bons résultats.

Oui, l'inliner est très agressif et automatique.

L'optimiseur x64 est également une tête au-dessus de la version 32bit (cette branche est complètement arrêtée et non développée). En outre, l'optimiseur x64 sait comment dérouler la plupart des fonctions virtuelles en appels directs et en ligne. Après tout, les fonctions virtuelles sont souvent dégénérées.

Mais la véritable surcharge se situe au niveau des opérations de référence et du contrôle des index dynamiques. Ils doivent être contrôlés en permanence.

 
Alexey Volchanskiy:

Dans le cadre d'une tâche exigeant beaucoup de ressources, une question s'est posée : quel est le surcoût de l'utilisation de la POO par rapport à la programmation procédurale classique ?

Bien sûr, les belles fonctionnalités de la POO sont coûteuses en ressources et en temps de débogage. La POO n'a de sens que comme enveloppe de texte pratique ou en cas d'utilisation minimale lors de l'initialisation de l'exécution... En fait, la POO n'était qu'un truc marketing de Microsoft pour augmenter les coûts des heures de travail des programmeurs et pour stimuler l'achat d'équipements plus avancés. Et ils ne sont pas idiots eux-mêmes et écrivent tous les logiciels en C et en assembleur.

Raison: