Forum: PC-Programmierung Speicherbedarf einer library


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Lukas (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hallo,
angenommen ich benutze zum programmieren (c) eine lib, welche mir 5 
Funktionen zur Verfügung stellt.
func1, func2, func3, func4, func5.
Wenn ich jetzt in meinem Projekt aber nur func2 benutze. Wie viel 
speicher wird verwendet? Von der kompletten lib? Oder nur, was für func2 
benötigt wird?
Wenn zweiteres, wäre es dann besser func2 neu zu implementieren 
(angenommen man würde es gleich machen wie in der lib)? Dann hätte man 
ja definitiv nur den Speicherbedarf für func2.

Mir geht es nur darum, um mal zu wissen, wie viel speicher von einer lib 
benötigt wird.

von c-hater (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Lukas schrieb:

> angenommen ich benutze zum programmieren (c) eine lib, welche mir 5
> Funktionen zur Verfügung stellt.
> func1, func2, func3, func4, func5.
> Wenn ich jetzt in meinem Projekt aber nur func2 benutze. Wie viel
> speicher wird verwendet? Von der kompletten lib? Oder nur, was für func2
> benötigt wird?

Hängt vom Linker ab und davon, ob linktime-Optimierungen 
aktiv/erlaubt/möglich sind.

Aber selbst wenn man den optimalen Fall annimmt, dass also diese 
Optimierungen möglich und erlaubt sind, wird immer noch genug Schotter 
über bleiben. Denn typisch stellen solche API-Funktionen nur eine 
kleinen Teil des Codes dar. Der ganze dicke Rest ist auch dann nötig, 
wenn du nur eine davon verwendest...

von Pandur S. (jetztnicht)


Bewertung
1 lesenswert
nicht lesenswert
Probier's aus.
Es gibt Leute die verwenden einzig zum Debuggen eine printf(myfloatADC) 
um einen ADC Wert auszugeben, und wundern sich weswegen nichts mehr 
sonst reinpasst.

von A. S. (achs)


Bewertung
0 lesenswert
nicht lesenswert
Normalerweise:

Alle Funktionen und Variablen die zusammen mit func2 in einer .c-Datei 
stehen
+ Alle .c-Dateien, in denen Funktionen oder Variablen sind, die direkt 
oder indirekt verwendet werden.

Schau Dir den Quelltext der standardlib an. Deshalb ist abs() als 
Dreizeiler im einer eigenen .c.

Bei printf zieht man dagegen einen ganzen Sumpf mit, z.b
 Floatingpoint-Mathe. Oder muss per linker eine Version aus 3 oder so 
auswählen.

von georg (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Einzig zuverlässige Möglichkeit ist Ausprobieren: linken und die Memory 
Map studieren. Leider ist selektives Linken aus der Mode gekommen, weil 
man ja immer GByte-weise Speicher hat, manche Systeme linken eine 
komplette Laufzeit-Bibliothek dazu egal was gebraucht wird, und dann ist 
Hello World mehrere MByte gross.

Es ist bei mir für Steuerungen z.B. öfter vorgekommen, dass ich 
Multiplikation gebraucht habe, Division usw. aber nicht. Das muss man 
dann meistens per Hand regeln.

Georg

von Joachim B. (jar)


Bewertung
0 lesenswert
nicht lesenswert
georg schrieb:
> Das muss man
> dann meistens per Hand regeln.

deswegen nutze ich arduino nano die float LIB (sprintf, printf) nie und 
rechne mit ganzzahligen Integer, mV cV dV, das Komma wenn benötigt kann 
man auch per Text einsetzen

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.