SRAM schonende Optimierung beim gcc?

Gast #5223820
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.
#5223839
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.
#5224268
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.
#5225020
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.
#5225072
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

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.

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.