Fragen zur Programm Optimierung

OP #1200748
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
>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
@ 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
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.