Hallo, Ich habe einen ATMEGA8 und gebe dort auf einem Display etwas aus. Nun hat mich irgendwie im AVRStudio mit WinAVR die Meldung: >Program: 3236 bytes (39.5% Full) >(.text + .data + .bootloader) >Data: 328 bytes (32.0% Full) >(.data + .bss + .noinit) stutzig gemacht, dachte mir das kann doch nicht sein... und schwups den übeltäter gefunden : >char buffer[5]; >itoa(result,buffer,5); Wenn ich itoa auskommentiere, verringert sich der Datenbedarf auf: >Program: 644 bytes (7.9% Full) >(.text + .data + .bootloader) >Data: 64 bytes (6.3% Full) >(.data + .bss + .noinit) also um ein gewaltiges Stück, wollte nun erfahren warum dies so ist ? Bzw. obs eine schonende Variante gibt ? Im grunde wird doch mit itoa nur jede Ziffer in ein ASCII Zeichen umgewandelt und in den benötigten Buffer geschrieben ?
Die itoa-Funktion braucht mit allen Abhängigkeiten etwa 170 Bytes. Dass bei dir der Unterschied viel größer ist, könnte damit zusammenhängen, dass durch das Weglassen des Aufrufs ein großer Teil des nachfolgenden Codes trivial und dadurch vom Compiler stark zusammenoptimiert wird.
da wird halt mit einem schlag die komplette bibliothek dazugelinkt... alle funktionen die da drin sind, ob du sie brauchst oder nicht, aber itoa ist teil der bibliothek, und wenn du es verwendest, musst du alles nehmen, ob du willst oder nicht... wenn du wirklich nur eine funktion aus einer bibliothek brauchst, dann schreib itoa selbst...
gast wrote: > da wird halt mit einem schlag die komplette bibliothek dazugelinkt... > alle funktionen die da drin sind, ob du sie brauchst oder nicht, aber > itoa ist teil der bibliothek, und wenn du es verwendest, musst du alles > nehmen, ob du willst oder nicht... Das ist schlicht Unfug.
Itoa wuerd ich so nicht verwenden. Zuerst sollte man schauen, ob man mit Hex nicht auch durchkommt. Von Fachleuten kann man in-hex-denken erwarten, von Laien nicht. Printf sollte man seinlassen ausser man ist sich sicher, dass float sein muss. Man kommt meist um float herum.
Das Mapfile gibt Auskunft darüber, was alles dazu gelinkt wird.
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.