Fragen zur Programm Optimierung

OP #1200748
Lesenswert?
• ▲
▼
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')
Gast #1200770
Lesenswert?
• ▲
▼
>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
Gast #1200772
Lesenswert?
• ▲
▼
@ 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.
OP #1200907
Lesenswert?
• ▲
▼
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)
#1201001
Lesenswert?
• ▲
▼
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren