itoa und sprintf - Rechenaufwendig?

Gast #1088618
Lesenswert?

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 ?
Gast #1088632
Lesenswert?

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.
Gast #1088633
Lesenswert?

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...
#1088642
Lesenswert?

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.
Gast #1088649
Lesenswert?

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.

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