MSVC - Любой способ проверить, действительно ли функция встроена? - PullRequest
5 голосов
/ 14 декабря 2009

Я должен проверить, встроена ли функция компилятором. Есть ли способ сделать это, не глядя на сборку (которую я не читаю). У меня нет выбора, чтобы выяснить это, поэтому я бы предпочел, если бы мы не могли обсудить мудрость этого. Спасибо!

Ответы [ 5 ]

6 голосов
/ 14 декабря 2009

Если вы включите предупреждения C4714, C4710 и C4711, это должно дать вам довольно подробную информацию о том, какие функции есть, а какие нет.

5 голосов
/ 14 декабря 2009

Каждый сайт вызова потенциально может отличаться.

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

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

2 голосов
/ 14 декабря 2009

Использование опции компилятора / FAs для выгрузки asm с исходным кодом - единственный способ, который я знаю, чтобы быть уверенным.

Примечание: если вы хотите, чтобы функция была встроенной, просто используйте __forceinline.

1 голос
/ 15 декабря 2009

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

0 голосов
/ 14 декабря 2009

Если вы действительно не хотите переходить в сборку, объявите функцию как __forceinline, и если исполняемый файл становится больше, вы знаете, что он не был встроенным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...