Проверьте, встроена ли конкретная функция - компилятор Intel - PullRequest
1 голос
/ 01 апреля 2012

У меня есть двоичные библиотеки C / C ++ (* .dll, * .sys), файлы obj, из которых они состоят, и их символы (pdb), но не исходный код и файлы карт.
Согласно символам они были построены компилятором Intel (для Windows).

Есть ли способ проверить, встроена ли конкретная функция?

Заранее спасибо.

1 Ответ

0 голосов
/ 02 апреля 2012

ICC особенно агрессивен с встраиванием, и во многих случаях, когда функция объявляется как inline (и особенно, если она __forceinline 'd на MSVC), она на самом деле выдает ошибку на этапе компиляции, если она невозможно вставить его (очевидно, в зависимости от настроек компиляции вашего проекта).

Тем не менее, честно говоря, честно, единственный способ, которым вы сможете сделать то, что вам нужно, это подключить отладчик, приостановить приложение в MSVC, переключиться в представление ASM и выполнить поиск вызовов для функции, имя которой вы ищете. (Вы говорите, C / C ++, это имеет значение, которое, как и в случае с C ++, вам придется искать искаженное имя). Если вы найдете вызовы функции (call _myFunc), она не будет встроена.

В противном случае, если вы знаете, где искать, просмотрите ASM, чтобы найти функцию caller , и проверьте ее источник, чтобы убедиться, что вызов callee либо есть, либо нет не там.

Это может звучать довольно устрашающе, но на самом деле это достаточно просто и всего на расстоянии ctrl+f.

...