Forum: Compiler & IDEs Speicherbelegung


von Stefan (Gast)


Lesenswert?

Hallo,

nach einigen größeren Änderungen in einem Projekt für den LPC2148(Arm) 
ist miteinmal nichtmehr genug Speicher vorhanden.
Genauergesagt ist das Data Segment miteinmal um ca. 2kb größer als 
vorher, obwohl keine globalen Variablen angelegt wurden. Etwas 
rumprobieren mit objdump hat ergeben, dass wohl malloc() sich irgendwie 
eingenistet hat, obwohl es nie im Code aufgerufen wird. Wahrscheinlich 
benutzt irgendeine Funktion aus der stdlib das intern.
Nun die frage: Wie kann ich rausfinden, welche stdlib Funktionen in 
meinem Projekt gelinkt sind? Kann ich auch rausfinden, welche davon 
malloc() benutzt?

Danke und Grüße,
Stefan

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Was alles gelinkt ist, siehst du in der Symboltabelle.  Diese kann
man sich mit dem Kommando `nm' ansehen (ggf. heißt es für den
Crosscompiler anders, z. B. `arm-nm' oder sowas).

Eine cross-reference aller Symbole bekommst du, wenn du beim Linken
--cref angibst.  Wenn du den Linker vom Compiler aus aufrufst, musst
du ein -Wl, voransetzen, also `-Wl,--cref'.  Wenn du sowieso ein
Mapfile generierst, wird die Tabelle dahin geschrieben, andernfalls
nach stdout.

von Stefan (Gast)


Lesenswert?

Besten Dank.
Habe den Übeltäter gefunden. Es war ein aufruf von rand().
Warum der allerdings über 10KB Flash braucht und 2Kb Ram ist mir nicht 
ganz klar. Allerdings konnte es jetzt durch eine EIgenimplementierung 
ersetzt werden und alles ist wieder beim Alten.
Gibt es eigentlich eine andere stadlib als die newlib für den Arm? Ich 
hätte gerne sowas wie die vom MSP430. Die vom Arm ist extrem 
speicherhungrig.

Grüße, Stefan

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.