Linux:Qual è il modo migliore per stimare la dimensione del codice e dei dati statici del programma?
Domanda
Voglio essere in grado di ottenere una stima della quantità di codice e dati statici utilizzati dal mio programma C++?
C'è un modo per scoprirlo guardando i file eseguibili o oggetto?O forse qualcosa che posso fare in fase di esecuzione?
objdump e readelf aiuteranno?
Soluzione
"dimensione" è lo strumento tradizionale."readelf" ha molte opzioni.
$ size /bin/sh
text data bss dec hex filename
712739 37524 21832 772095 bc7ff /bin/sh
Altri suggerimenti
Se vuoi fare il passo successivo e identificare le funzioni e le strutture dati su cui concentrarti per ridurre l'impronta, l'argomento --size-sort di nm può mostrarti:
$ 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
aiuterà davvero.Puoi usare il -S
opzione;che mostrerà le dimensioni di tutte le sezioni. .text
è (la maggior parte del) codice eseguibile. .data
E .rodata
sono i tuoi dati statici.Ci sono anche altre sezioni, alcune delle quali vengono utilizzate in fase di esecuzione, altre solo in fase di collegamento.
size -A