Linux:Каков наилучший способ оценить размер кода и статических данных программы?
Вопрос
Я хочу иметь возможность получить оценку того, сколько кода и статических данных используется моей программой на C ++?
Есть ли способ выяснить это, просмотрев исполняемый файл или объектные файлы?Или, может быть, что-то, что я могу сделать во время выполнения?
Помогут ли objdump и readelf?
Решение
"размер" - это традиционный инструмент.У "readelf" есть множество опций.
$ size /bin/sh
text data bss dec hex filename
712739 37524 21832 772095 bc7ff /bin/sh
Другие советы
Если вы хотите сделать следующий шаг по определению функций и структур данных, на которых нужно сосредоточиться для уменьшения занимаемой площади, аргумент --size-sort для nm может показать вам:
$ 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
действительно, поможет.Вы можете использовать -S
вариант;это покажет размеры всех секций. .text
является (основной частью) вашего исполняемого кода. .data
и .rodata
это ваши статические данные.Существуют и другие разделы, некоторые из которых используются во время выполнения, другие - только во время соединения.
size -A