Можно ли профилировать встроенные функции C / C ++, глядя на сборку?

Я хочу измерить производительность и общее поведение (сколько сборок создано и т. Д.) Некоторых встроенных функций, которые я использую в своем проекте. Кроме синхронизации профилирования, возможно ли посмотреть на расширение внешнего кода функций, которые используют эти встроенные функции?

Я пытался в Visual C ++ и MingW (через NetBeans) посмотреть на панель «Разборка» во время отладки. При сборке отладки используются все встроенные функции вызов в сборке, чтобы они не были встроены. Если я активирую оптимизацию, сборка настолько изменяется, что я даже не могу поставить точки останова внутри этих функций.

Знаете ли вы какие-либо настройки компилятора (например, в GCC или VC, просто оптимизирующие встроенные функции), книгу (у меня есть «Эффективный C ++», в котором говорится о включении временных параметров измерения) или что-нибудь еще, чтобы лучше понять тему?

2

Решение

Здесь ссылка на сайт переключателю компилятора в VS. Если вы просто хотите проверить inline, включите эту оптимизацию.

0

Другие решения

Такие инструменты, как Intel VTune, могут профилировать встроенные функции. Они используют отладочную информацию в двоичном файле, чтобы отобразить указатели инструкций обратно в функцию, «из которой был получен код», даже когда нет фактического call больше в сборке.

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

Этот процесс не совершенен, поскольку «к какой функции относится данная конкретная инструкция» почти становится философским, а не техническим для некоторых типов встраивания (действительно, инструкции могут эффективно «делиться» между несколькими функциями).

0

По вопросам рекламы [email protected]