Worauf mussman achten um das eigene programm so effizient wie möglich zu machen? ich weis das ist ne ziemlich algemeine frage aber trotzden wäre jede antwort sehr wilkommen. PS: was ist besser if(strncmp_PP(g_CfgHtmlLine+Trans->j,"%P",2) == 0) oder if(*(g_CfgHtmlLine+Trans->j) = '%' && *(g_CfgHtmlLine+Trans->j) = 'P')
>if(*(g_CfgHtmlLine+Trans->j) = '%' && *(g_CfgHtmlLine+Trans->j) = 'P')
enthält gleich zwei Fehler ...
1 | if(*(g_CfgHtmlLine+Trans->j) == '%' && *(g_CfgHtmlLine+Trans->j) == 'P') |
ist viel schneller, da der Compiler erkennen wird, das j nicht gleichzeitig % und P sein kann. Also optimiert er die Zeile, und dazu gleich noch den ganzen if-Block, weg. Allerdings ist das wohl nicht exakt das, was du eigentlich wolltest. Oliver
@ Trax Das Problem mit Deinem vorgeschlagenen Code
1 | if(*(g_CfgHtmlLine+Trans->j) = '%' && *(g_CfgHtmlLine+Trans->j) = 'P') |
ist, das er so in keinem Fall funktioniert. Es fehlt die Indizierung der Elemente des Vektors j und der korrekte Operator für einen Vergleich:
1 | if(*(g_CfgHtmlLine+Trans->j) == '%' && *((g_CfgHtmlLine+Trans->j)+1) == 'P') |
Danach scheinst Du noch eine Wegstrecke von der Fragestellung "wie programmiere ich optimal" entfernt zu sein. Am besten lernst Du überhaupt erstmal (in C) programmieren.
Ich kann C sogar recht gut, ich habe nur die ganz böse Angewohnheit, alles schnell schell zu machen und Sachen zu posten ohne sie zu testen, Bei genauerer Betrachtung der 2 von mir geposten Zeilen sollte auch auffallen das *(g_CfgHtmlLine+Trans->j) nicht funktionieren kann da g_CfgHtmlLine eine prog_char array ist den oben benutze ich ja strncmp_PP in dem original code benutzte es müsste schon pgm_read_byte(g_CfgHtmlLine+Trans->j) sein ;) also noch mal die frage was ist besser
1 | #define strncmp_PP(_L,_R,_n) strncmp_P(_R,_L,_n);
|
oder
1 | #define strncmp_PP(_L,_R,_n) _str2cmp_P(_L,_R)
|
2 | int _strcmp_P(const prog_char* L,const char* R) |
3 | {
|
4 | if(pgm_read_byte(L) == R[0] && pgm_read_byte(L+1) == R[1]) |
5 | return 0; |
6 | else
|
7 | return 1; |
8 | }
|
diesmal ein auszug aus meinem und getestetem funktionierendem code, aufruf ist
1 | if(strncmp_PP(g_CfgHtmlLine+Trans->j,"%P",2) == 0) |
letzten Endes gibt es immer nur eine Möglichkeit deine Frage zu beantworten: Probier beide Varianten aus und miss die Laufzeit Alles andere ist Kaffeesatzleserei. Allerdings: Mit solchen Low-Level Optimierungen gewinnt man meistens nicht die Laufzeit. Algorithmische Optimierungen sind meist viel zielführender. Ob eine Anweisung, die 2 mal in der Sekunde ausgeführt wird, um 20 Millisekunden schneller wird oder nicht, spiel global gesehen so gut wie keine Rolle. Erste Grundregel der Optimierung: Stelle fest wo deine Rechenzeit verbraten wird. Nicht raten, nicht glauben ... sondern messen! Alles andere ist sinnlos.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.