@damaltor
Na gut ich habe fürchterlich übertrieben mit den 'Meilen'.
Ausserdem gebe ich dir natürlich Recht, dass das ganze eine eigene Vorliebe ist.
Aber der HEX-Output bei deinem Beispiel ergibt immerhin 22 Byte Unterschied zugunsten der IF-Orgie.
Size before:
test.elf :
section size addr
.text 1600 0
Size after:
test.elf :
section size addr
.text 1622 0
Je nachdem, welchen der beiden IF_CODE-Zeilen auskommentiert gibt es da die Unterschiede:
Benutzt man aber die Variante, dass die IF's eigendlich mit "else if" fortgeführt werden sollten um so halbwegs performat zu sein, reduziert sich dieser Vorteil auf popelige 4 Byte bei dem 10-er Beispiel:Code:#include "asuro.h" //#define IF_CODE 1 #undef IF_CODE int main () { char wert, a=0; wert = PollSwitch (); #ifdef IF_CODE if(wert==1){ a=wert+1; } if(wert==2){ a=wert+2; } if(wert==3){ a=wert+3; } if(wert==4){ a=wert+4; } if(wert==5){ a=wert+5; } if(wert==6){ a=wert+6; } if(wert==7){ a=wert+7; } if(wert==8){ a=wert+8; } if(wert==9){ a=wert+9; } if(wert==10){ a=wert+10; } #else switch (wert){ case 1: a=wert+1; break; case 2: a=wert+2; break; case 3: a=wert+3; break; case 4: a=wert+4; break; case 5: a=wert+5; break; case 6: a=wert+6; break; case 7: a=wert+7; break; case 8: a=wert+8; break; case 9: a=wert+9; break; case 10: a=wert+10; break; } #endif return a; }
-> Und hier liegt ein entscheidender Vorteil vom swtich/case: Performanter, da ein Sprung zur Stelle erfolgt die gerade benötigt wird und eben nicht ein 'rumraten' wohin es denn nun gehen soll.
Size before:
test.elf :
section size addr
.text 1618 0
Size after:
test.elf :
section size addr
.text 1622 0
Code:#include "asuro.h" //#define IF_CODE 1 #undef IF_CODE int main () { char wert, a=0; wert = PollSwitch (); #ifdef IF_CODE if(wert==1){ a=wert+1; } else if(wert==2){ a=wert+2; } else if(wert==3){ a=wert+3; } else if(wert==4){ a=wert+4; } else if(wert==5){ a=wert+5; } else if(wert==6){ a=wert+6; } else if(wert==7){ a=wert+7; } else if(wert==8){ a=wert+8; } else if(wert==9){ a=wert+9; } else if(wert==10){ a=wert+10; } #else switch (wert){ case 1: a=wert+1; break; case 2: a=wert+2; break; case 3: a=wert+3; break; case 4: a=wert+4; break; case 5: a=wert+5; break; case 6: a=wert+6; break; case 7: a=wert+7; break; case 8: a=wert+8; break; case 9: a=wert+9; break; case 10: a=wert+10; break; } #endif return a; }
@radbruch
Ja was soll das denn? Nicht die LIB benutzen, ist das denn erlaubt?
Der Hinweis von mir bezog sich nur auf die Speicherplatz-Probleme die ich bei dem Asuro-Programmteil hatte um da alle Tests unterzubringen.






Zitieren
Lesezeichen