Linux:Qual é a melhor maneira de estimar o código e o tamanho dos dados estáticos do programa?
Pergunta
Quero obter uma estimativa de quanto código e dados estáticos são usados pelo meu programa C++?
Existe uma maneira de descobrir isso observando os arquivos executáveis ou objetos?Ou talvez algo que eu possa fazer em tempo de execução?
Objdump e readelf ajudarão?
Solução
"tamanho" é a ferramenta tradicional."readelf" tem muitas opções.
$ size /bin/sh
text data bss dec hex filename
712739 37524 21832 772095 bc7ff /bin/sh
Outras dicas
Se você quiser dar o próximo passo na identificação das funções e estruturas de dados nas quais focar na redução da pegada, o argumento --size-sort para nm pode mostrar:
$ 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
realmente ajudará.Você pode usar o -S
opção;que mostrará os tamanhos de todas as seções. .text
é (a maior parte) o seu código executável. .data
e .rodata
são seus dados estáticos.Existem outras seções também, algumas das quais são usadas em tempo de execução, outras apenas em tempo de link.
size -A