Speicherbelegung

Gast #675869
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
Moderator Persönliche Seite #676195
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.
Gast #676331
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren