itoa und sprintf - Rechenaufwendig?

Gast #1088618
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
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
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
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
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

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.