MSVC - Какой-либо способ проверить, встраивается ли функция на самом деле?

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

5
задан Steve 14 December 2009 в 19:34
поделиться

5 ответов

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

1
ответ дан 18 December 2019 в 13:15
поделиться

Каждый сайт вызова потенциально может быть другим.

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

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

5
ответ дан 18 December 2019 в 13:15
поделиться

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

Примечание: если вы хотите принудительно сделать функцию встроенной , просто используйте __ forceinline .

2
ответ дан 18 December 2019 в 13:15
поделиться

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

0
ответ дан 18 December 2019 в 13:15
поделиться

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

6
ответ дан 18 December 2019 в 13:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: