La splendeur et la pauvreté de l'OLP - page 4

 
Integer:

... L'hypothèse est que ce cas devrait fonctionner très rapidement, car il n'y a pas d'appels if et switch pour changer la façon dont le programme fonctionne, seulement une fois que la classe - descendant requise est sélectionnée pendant l'initialisation, alors tout fonctionne directement et facilement.

...

MetaDriver:

...

Dans les langages avec de "vrais" pointeurs, il n'y a pas d'effet de ce type, le commutateur est perdant, plus la liste de sélection est grande.

...

Les gars, fumez la documentation de l'interrupteur. Un bon commutateur est une transition commutée dont les performances ne dépendent pas du nombre de choix. 1 choix, 100 ou 1000 - sa vitesse de transition sera constante.
Как работает оператор switch в Си/Си++ - CyberForum.ru - форум программистов и сисадминов
  • Evg
  • www.cyberforum.ru
ВНИМАНИЕ! Вопросы по существу обсуждаемого вопроса просьба задавать здесь или создать тему на форуме и кинуть на неё ссылку в блог или мне в личку. Причин для этого несколько. Я, как и любой другой автор, всегда могу упустить интересный момент обсуждаемой темы (что подтвердилось на практике). А потому задаваемый вопрос может закрывать...
 
Integer:
Pourquoi dois-je comprendre les mécanismes de compilation ? Juste pour croire qu'un mauvais résultat est meilleur qu'un bon ?

C'est une étrange déclaration. Vous essayez de résoudre des problèmes d'optimisation au niveau du compilateur et pourtant vous ne savez pas comment fonctionne le compilateur.

 
C-4:
Les gars, lisez la documentation du commutateur. Un bon commutateur est une transition commutée dont la performance est indépendante du nombre de choix. 1 choix, 100 ou 1000 - sa vitesse de transition sera constante.
Oui, nous avons un interrupteur avec un saut de table direct, s'il y a suffisamment d'éléments comme dans les exemples.
 

Je suis très proche de zéro en programmation et je sais que la POO est faite plus pour la commodité que pour la vitesse. Et c'est vrai - la POO est une chose pratique, si vous savez comment l'utiliser.

D'un autre côté, il est préférable pour metaquotes de passer du temps sur les spreads incorrects dans le testeur. Il n'y a aucun sens à écrire des EAs en l'utilisant si vous ne pouvez pas les tester de manière adéquate. La plupart d'entre eux s'appliquent aux transactions sur les FORTS.

 
dimeon:

Je suis très proche de zéro en programmation et je sais que la POO est faite plus pour la commodité que pour la vitesse. Et c'est vrai - la POO est une chose pratique, si vous savez comment l'utiliser.

D'un autre côté, il est préférable pour metaquotes de passer du temps sur les spreads incorrects dans le testeur. Il n'y a aucun sens à écrire des EAs en l'utilisant si vous ne pouvez pas les tester de manière adéquate. Cela concerne surtout les échanges sur les FORTS.

Avez-vous déjà donné une explication détaillée (preuve) quelque part ?

Ici, il est d'usage d'étayer ses déclarations par des preuves, sinon on ne les regarde même pas. ;)

 

Et en général, l'exemple du top-starter montre qu'il y a de l'inlining. Sans elle, en mode débogage, les résultats sont inversés et la POO est plus rapide :

Cette image laisse entendre que les camarades cherchent un chat noir dans une pièce sombre.

 
Renat:

...

La méthode virtuelle, en revanche, ne peut être coupée - elle est toujours appelée. Par conséquent, dans un cas, il n'y a qu'une boucle, et dans l'autre cas, il y a un appel dans la boucle.

...

À propos, vous pouvez également supprimer les boucles vides. Code :

void OnStart(){
   for(int i = 0; i < 1000000; i++)
      foo();
}

void foo(void){}

On peut la réduire à un simple :

void OnStart(){
   ;
}
 
Vinin:

Les preuves viendront de l'autre côté. Ou encore juste des mots.

En général, je ne suis intéressé que par les faits.

Bien que je sache déjà que la POO est plus lente, mais elle offre des commodités bien concrètes

Lundi je montrerai par un exemple de profilage d'un vrai projet OOP que sa performance à la limite tend vers la performance des appels de fonctions système.
 
C-4:

C'est une étrange déclaration. Vous essayez de résoudre des problèmes d'optimisation au niveau du compilateur et pourtant vous ne savez pas comment cela fonctionne.

Désolé, vous avez confondu, je n'essayais pas d'optimiser le compilateur. Si vous ne comprenez pas ce que je faisais, essayez de relire ce fil depuis le début, mais plus attentivement, et essayez également de ne pas vous éloigner du sujet.
 
Renat:
Oui, nous avons un interrupteur avec un saut direct sur la table s'il y a suffisamment d'éléments, comme dans les exemples.

Les exemples de cet exemple prennent la variante la plus simple, où les valeurs des clés sont en incréments uniques, de sorte que le décalage est simplement calculé. Mais si nous avons une telle variante :

case 10: ...

case 100: ... case 1000: ... case 1000000: ...

Ici, si je comprends bien, l'index est défini par une recherche binaire. Avez-vous ces deux méthodes ?