Есть ли метод / функция, чтобы получить размер кода C-программы, скомпилированной с помощью компилятора GCC? (может меняться при применении некоторой техники оптимизации)
- Могу ли я измерить размер кода с помощью
fseek()
Функция и сохранить его в переменной оболочки? - Можно ли извлечь размер кода, время компиляции и время выполнения, используя
milepost gcc
илиGNU Profiler tool
? Если да, как сохранить их в переменных оболочки?
Поскольку моя цель состоит в том, чтобы найти лучший набор методов оптимизации на основе времени компиляции, времени выполнения и размера кода, я буду ожидать некоторую функцию, которая может возвращать эти параметры.
MyPgm=/root/Project/Programs/test.c
gcc -Wall -o1 -fauto-inc-dec $MyPgm -o output
time -f "%e" -o Output.log ./output
while read line;
do
echo -e "$line";
Val=$line
done<Output.log
Это будет хранить время выполнения переменной Val
, Точно так же я хочу получить значения размера кода, а также время компиляции. Я предпочту что-то, что я могу сделать, чтобы выполнить это, без использования внешней программы!
3 ответа
Для размера кода в linux вы можете использовать команду size на терминале. $size file-name.out
это даст размер различных разделов. используйте текстовый раздел для размера кода. Вы можете использовать data и bss, если вы хотите учитывать и глобальный размер данных.
Вы можете использовать size(1)
команда http://www.linuxmanpages.com/man1/size.1.php
Или откройте файл ELF, просмотрите заголовки разделов и суммируйте размеры всех разделов с типом SHT_PROGBITS и установленным флагом SHF_EXECINSTR.
В системах, отличных от Linux / non-GNU-utils (где у вас может не быть ни GNU size
ни readelf
), nm
Программа может использоваться для выгрузки символьной информации (включая размеры) из объектных файлов (библиотек / исполняемых файлов). Синтаксис немного зависит от системы:
- Страница руководства OpenGroup для
nm
("переносимое подмножество") - Справочная страница по Linux/BSD для
nm
(Версия GNU) - Руководство Solaris для
nm
- Страница AIX для
nm
nm
использование в HP / UX (это говорит "PA-RISC", но утилита присутствует / может использоваться на Itanium)- Windows: не имеет
nm
как таковой, но см.: Microsoft эквивалент команды nm
К сожалению, несмотря на то, что утилита доступна почти везде, ее выходной формат не так переносим, как могло бы быть, поэтому необходимы некоторые специфичные для системы сценарии.