Я хочу измерить производительность и общее поведение (сколько сборок создано и т. Д.) Некоторых встроенных функций, которые я использую в своем проекте. Кроме синхронизации профилирования, возможно ли посмотреть на расширение внешнего кода функций, которые используют эти встроенные функции?
Я пытался в Visual C ++ и MingW (через NetBeans) посмотреть на панель «Разборка» во время отладки. При сборке отладки используются все встроенные функции вызов в сборке, чтобы они не были встроены. Если я активирую оптимизацию, сборка настолько изменяется, что я даже не могу поставить точки останова внутри этих функций.
Знаете ли вы какие-либо настройки компилятора (например, в GCC или VC, просто оптимизирующие встроенные функции), книгу (у меня есть «Эффективный C ++», в котором говорится о включении временных параметров измерения) или что-нибудь еще, чтобы лучше понять тему?
Здесь ссылка на сайт переключателю компилятора в VS. Если вы просто хотите проверить inline, включите эту оптимизацию.
Такие инструменты, как Intel VTune, могут профилировать встроенные функции. Они используют отладочную информацию в двоичном файле, чтобы отобразить указатели инструкций обратно в функцию, «из которой был получен код», даже когда нет фактического call
больше в сборке.
Вы можете увидеть этот эффект, глядя на аннотированную сборку также с некоторыми инструментами — исходный код для нескольких функций будет смешан вместе, что отражает встраивание.
Этот процесс не совершенен, поскольку «к какой функции относится данная конкретная инструкция» почти становится философским, а не техническим для некоторых типов встраивания (действительно, инструкции могут эффективно «делиться» между несколькими функциями).