Lo splendore e la povertà dell'OLP - pagina 4

 
Integer:

... L'ipotesi è che questo caso dovrebbe funzionare molto rapidamente, perché non ci sono chiamate if e switch che cambiano il modo in cui funziona il programma, solo una volta che la classe richiesta - discendente è selezionata durante l'inizializzazione, allora tutto funziona in modo semplice e diretto.

...

MetaDriver:

...

Nei linguaggi con puntatori "reali" non ci sarà questo effetto, switch perderà lì, più grande è la lista di selezione.

...

Ragazzi, fumate la documentazione dell'interruttore. Un buon interruttore è una transizione commutata le cui prestazioni non dipendono dal numero di scelte. 1 scelta, 100 o 1000 - la sua velocità di transizione sarà costante.
Как работает оператор switch в Си/Си++ - CyberForum.ru - форум программистов и сисадминов
  • Evg
  • www.cyberforum.ru
ВНИМАНИЕ! Вопросы по существу обсуждаемого вопроса просьба задавать здесь или создать тему на форуме и кинуть на неё ссылку в блог или мне в личку. Причин для этого несколько. Я, как и любой другой автор, всегда могу упустить интересный момент обсуждаемой темы (что подтвердилось на практике). А потому задаваемый вопрос может закрывать...
 
Integer:
Perché devo capire i meccanismi di compilazione? Solo per credere che un cattivo risultato sia meglio di uno buono?

Questa è una strana affermazione. State cercando di risolvere problemi di ottimizzazione a livello di compilatore e tuttavia non sapete come funziona il compilatore.

 
C-4:
Ragazzi, leggete la documentazione dell'interruttore. Un buon interruttore è una transizione commutata le cui prestazioni sono indipendenti dal numero di scelte. 1 scelta, 100 o 1000 - la sua velocità di transizione sarà costante.
Sì, abbiamo l'interruttore con il salto diretto della tabella se ci sono abbastanza elementi come negli esempi.
 

Sono molto vicino allo zero nella programmazione e so che OOP è fatto più per comodità che per velocità. Ed è vero - OOP è una cosa utile, se sai come usarla.

D'altra parte, è meglio per i metaquote spendere tempo sugli spread errati nel tester. Non ha senso scrivere degli EA che lo utilizzano se non si possono testare adeguatamente. La maggior parte si applica al trading su FORTS.

 
dimeon:

Sono molto vicino allo zero nella programmazione e so che OOP è fatto più per comodità che per velocità. Ed è vero - OOP è una cosa utile, se sai come usarla.

D'altra parte, è meglio per i metaquote spendere tempo sugli spread errati nel tester. Non ha senso scrivere degli EA che lo utilizzano se non si possono testare adeguatamente. Questo riguarda soprattutto il trading su FORTS.

Ha già dato una spiegazione dettagliata (prova) da qualche parte?

Qui è consuetudine giustificare le proprie affermazioni con delle prove, altrimenti non le si guarda nemmeno. ;)

 

E in generale, l'esempio del top-starter mostra che c'è l'inlining. Senza di esso, in modalità debug, i risultati sono invertiti e OOP è più veloce:

Questa immagine suggerisce che i compagni stanno cercando un gatto nero in una stanza buia.

 
Renat:

...

Il metodo virtuale, d'altra parte, non può essere tagliato - è sempre chiamato. Di conseguenza, in un caso c'è solo un ciclo, e nell'altro caso c'è una chiamata nel ciclo.

...

A proposito, potete anche cancellare i loop vuoti. Codice:

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

void foo(void){}

Può essere ridotto a uno semplice:

void OnStart(){
   ;
}
 
Vinin:

Le prove verranno dall'altra parte. O di nuovo solo parole.

In generale, mi interessano solo i fatti.

Anche se so già che OOP è più lento, ma fornisce convenienze abbastanza concrete

Lunedì mostrerò con un esempio di profilazione di un vero progetto OOP che la sua performance al limite tende alla performance delle chiamate di funzioni di sistema.
 
C-4:

Questa è una strana affermazione. State cercando di risolvere problemi di ottimizzazione a livello di compilatore eppure non sapete come funziona.

Scusa, hai confuso qualcosa, non stavo cercando di ottimizzare il compilatore. Se non capite cosa stavo facendo, provate a rileggere questo thread dall'inizio, ma con più attenzione, e cercate anche di non diventare intelligenti off-topic.
 
Renat:
Sì, abbiamo un interruttore con un salto diretto sulla tabella se ci sono abbastanza elementi, come negli esempi.

Gli esempi di questo esempio prendono la variante più semplice, dove i valori chiave sono in incrementi singoli, quindi l'offset è semplicemente calcolato. Ma se abbiamo una tale variante

case 10: ...

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

Qui, da quanto ho capito, l'indice è definito attraverso la ricerca binaria. Avete entrambi questi metodi?