Linux :Quelle est la meilleure façon d’estimer la taille du code et des données statiques du programme ?
Question
Je souhaite pouvoir obtenir une estimation de la quantité de code et de données statiques utilisées par mon programme C++ ?
Existe-t-il un moyen de le découvrir en examinant les fichiers exécutables ou objets ?Ou peut-être quelque chose que je peux faire au moment de l'exécution ?
Est-ce que objdump et readelf vous aideront ?
La solution
La « taille » est l'outil traditionnel."readelf" a beaucoup d'options.
$ size /bin/sh
text data bss dec hex filename
712739 37524 21832 772095 bc7ff /bin/sh
Autres conseils
Si vous souhaitez passer à l'étape suivante consistant à identifier les fonctions et les structures de données sur lesquelles vous concentrer pour réduire l'empreinte, l'argument --size-sort de nm peut vous montrer :
$ 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
va effectivement aider.Vous pouvez utiliser le -S
option;qui montrera les tailles de toutes les sections. .text
est (la majeure partie de) votre code exécutable. .data
et .rodata
sont vos données statiques.Il existe également d'autres sections, dont certaines sont utilisées au moment de l'exécution, d'autres uniquement au moment de la liaison.
size -A