Есть ли метод/функция для получения размера кода программы 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. Точно так же я хочу получить значения размера кода, а также время компиляции. Я предпочту то, что я могу сделать для этого, не используя внешнюю программу!


person Praveen Vinny    schedule 21.11.2012    source источник


Ответы (3)


для размера кода в Linux вы можете использовать команду size на терминале. $size имя-файла.out

это даст размер различных разделов. используйте текстовый раздел для размера кода. вы можете использовать данные и bss, если хотите также учитывать глобальный размер данных.

person Vishal Venugopal    schedule 21.11.2012
comment
Как я могу сохранить значение текстового раздела в переменной оболочки? - person Praveen Vinny; 21.11.2012

Вы можете использовать команду size(1) http://www.linuxmanpages.com/man1/size.1.php

Или откройте файл ELF, пройдитесь по заголовкам разделов и просуммируйте размеры всех разделов с типом SHT_PROGBITS и установленным флагом SHF_EXECINSTR.

person chill    schedule 21.11.2012

В системах, отличных от Linux/GNU-utils (где у вас может не быть ни GNU size, ни readelf), программа nm может использоваться для вывода информации о символах (включая размеры) из объектных файлов (библиотек/исполняемых файлов). Синтаксис немного зависит от системы:

К сожалению, несмотря на то, что утилита доступна почти везде, ее формат вывода не настолько переносим, ​​как мог бы быть, поэтому необходимы некоторые специфичные для системы сценарии.

person FrankH.    schedule 22.11.2012