Linux:Was ist der beste Weg, um die Code- und statische Datengröße eines Programms abzuschätzen?
Frage
Ich möchte eine Schätzung darüber erhalten, wie viel Code und statische Daten von meinem C++-Programm verwendet werden.
Gibt es eine Möglichkeit, dies herauszufinden, indem man sich die ausführbaren Dateien oder Objektdateien ansieht?Oder vielleicht etwas, was ich zur Laufzeit tun kann?
Helfen objdump und readelf?
Lösung
„Größe“ ist das traditionelle Werkzeug.„readelf“ bietet viele Optionen.
$ size /bin/sh
text data bss dec hex filename
712739 37524 21832 772095 bc7ff /bin/sh
Andere Tipps
Wenn Sie den nächsten Schritt unternehmen möchten, um die Funktionen und Datenstrukturen zu identifizieren, auf die Sie sich bei der Reduzierung des Footprints konzentrieren sollten, kann Ihnen das Argument --size-sort für nm Folgendes zeigen:
$ nm --size-sort /usr/bin/fld | tail -10
000000ae T FontLoadFontx
000000b0 T CodingByRegistry
000000b1 t ShmFont
000000ec t FontLoadw
000000ef T LoadFontFile
000000f6 T FontLoadDFontx
00000108 D fSRegs
00000170 T FontLoadMinix
000001e7 T main
00000508 T FontLoadBdf
readelf
wird in der Tat helfen.Du kannst den ... benutzen -S
Möglichkeit;Dadurch werden die Größen aller Abschnitte angezeigt. .text
ist (der Großteil) Ihres ausführbaren Codes. .data
Und .rodata
sind Ihre statischen Daten.Es gibt auch andere Abschnitte, von denen einige zur Laufzeit verwendet werden, andere nur zur Linkzeit.
size -A