Forum: Compiler & IDEs SRAM schonende Optimierung beim gcc?


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 SRAM ist voll (Gast)


Bewertung
0 lesenswert
nicht lesenswert
'-Os' läßt ja der benötigten Flashspeicher schrumpfen.

Welche von den vielen -f... Optionen nimmt man, wenn man noch viel 
Flashspeicher frei hat, aber das SRAM zur Neige geht?

von Hans (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Ich bezweifle, dass es da entscheidende Unterschiede gibt. Du musst 
vielmehr dein Programm handoptimieren...

von Hans (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Wenn du noch viel Flash über hast, heißt das ja, dass du nicht viel Code 
hast, aber sich anscheinend viele Daten in Arrays etc. häufen. Die 
werden natürlich nicht kleiner. Daten sind Daten. Du musst einfach 
sinnvoll planen, sofern möglich.

von Carl D. (jcw2)


Bewertung
3 lesenswert
nicht lesenswert
SRAM ist voll schrieb:
> '-Os' läßt ja der benötigten Flashspeicher schrumpfen.
>
> Welche von den vielen -f... Optionen nimmt man, wenn man noch viel
> Flashspeicher frei hat, aber das SRAM zur Neige geht?

Sind die verwendeten Strings schon im Flash, oder sind die noch im RAM?
1
const char string[] = "ein String";
sieht dank const nicht so aus, aber belegt 11Byte wertvolles RAM

http://www.nongnu.org/avr-libc/user-manual/pgmspace.html
beschreibt was man dagegen tun kann.

: Bearbeitet durch User
von Wilhelm M. (wimalopaan)


Bewertung
2 lesenswert
nicht lesenswert
SRAM ist voll schrieb:
> '-Os' läßt ja der benötigten Flashspeicher schrumpfen.
>
> Welche von den vielen -f... Optionen nimmt man, wenn man noch viel
> Flashspeicher frei hat, aber das SRAM zur Neige geht?

Welche Sprache soll es denn sein?

Um RAM zu sparen, sollte / kann man C++ möglichst viel Information in 
die Datentypen codieren: das hat zur Folge, dass

1) der Compiler viel besser optimieren kann, da er mehr Typinformationen 
zur Verfügung hat

2) man "gezwungen" ist, sich zu überlegen, welche Informationen man zur 
Compilezeit ggf. durch Meta-Funktionen schon berechnen kann.

Datentypen als solche sind ja im Maschinencode nicht mehr präsent und 
belegen keine SRAM.

Meine Beobachtung bei fremden Code ist, dass die meisten Leute sich viel 
zu wenig Gedanken um ihr (domänenspezifisches) Typ-System machen. Aber 
genau das ist das A-und-O.

Natürlich kann(!) (nicht muss) extensive Nutzung der Template-Mechanik 
zur Produktion von mehr Code (im Flash) führen. Allerdings sind 
teilweise die Optimierungen des Clang / gcc bei template-code geradezu 
"atemberaubend", und andererseits tun ein paar (k)Byte mehr 
Flashverbrauch weniger weh als beim SRAM.

von Rolf M. (rmagnus)


Bewertung
0 lesenswert
nicht lesenswert
Carl D. schrieb:
> Sind die verwendeten Strings schon im Flash, oder sind die noch im
> RAM?const char string[] = "ein String";sieht dank const nicht so aus,
> aber belegt 11Byte wertvolles RAM

Nicht unbedingt. Das hängt von der (hier unbekannten) Architektur ab.

> http://www.nongnu.org/avr-libc/user-manual/pgmspace.html
> beschreibt was man dagegen tun kann.

Ja, für den AVR hast du recht.

von Carl D. (jcw2)


Bewertung
0 lesenswert
nicht lesenswert
Rolf M. schrieb:
> Carl D. schrieb:
>> Sind die verwendeten Strings schon im Flash, oder sind die noch im
>> RAM?const char string[] = "ein String";sieht dank const nicht so aus,
>> aber belegt 11Byte wertvolles RAM
>
> Nicht unbedingt. Das hängt von der (hier unbekannten) Architektur ab.
>
>> http://www.nongnu.org/avr-libc/user-manual/pgmspace.html
>> beschreibt was man dagegen tun kann.
>
> Ja, für den AVR hast du recht.

Stimmt, ich hab dieses Forum als AVR-Forum kennengelernt und so was 
prägt.

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]
  • [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.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

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