Какие инструкции подсчитывает инструмент пин-кода 'instCount'?

Я запускаю pintool 'instCount' в базовой программе C с пустым телом в основной функции.

интервал основной () {

}

Когда я запускаю instCount для этого исполняемого файла программы, он показывает около 86000 инструкций. Даже программа очень маленькая, почему генерируется так много инструкций..??Есть идеи.??

Спасибо


person ANTHONY    schedule 06.01.2016    source источник


Ответы (1)


Чего не хватает, так это того, что за кулисами выполняется много работы, чтобы довести вас до точки, где выполняется функция main(). Среда выполнения должна выполнить много работы, чтобы предоставить среду, которую вы ожидаете получить. Например:

  • Библиотеки должны быть загружены и инициализированы.
  • Внутренние структуры данных (например, распределитель динамической памяти) должны быть выделены и инициализированы.
  • Существуют различные факторы среды, которые могут изменить способ выполнения среды выполнения. Это нужно проверить и тоже принять меры.

То, что я перечислил, — это лишь неполный список того, что происходит во время запуска. Подобные вещи происходят во время выключения, что также увеличивает количество инструкций.

person nitzanms    schedule 07.01.2016
comment
Можете ли вы подробнее рассказать о среде, о которой вы говорите. Во-вторых, хотя я не включаю файлы заголовков, почему он должен загружать библиотеки.!? - person ANTHONY; 11.01.2016
comment
Например, в Unix переменная среды с именем LD_PRELOAD может означать, что определенные библиотеки необходимо загрузить, даже если программа не запрашивала их загрузку. - person nitzanms; 11.01.2016
comment
@ANTHONY Боюсь, объяснение тонкостей загрузки файлов немного выходит за рамки этого вопроса. Я рекомендую вам просмотреть следующую ссылку, чтобы увидеть, что происходит во время запуска: dbp-consulting.com/tutorials/debugging/linuxProgramStartup.html - person nitzanms; 11.01.2016
comment
В C файлы заголовков не имеют ничего общего с загружаемыми библиотеками или нет, они просто существуют, чтобы позволить компилятору видеть определения для вещей в местах за пределами исходного файла, который в данный момент компилируется. - person nitzanms; 11.01.2016