Как я узнаю, будет ли встроена функция Delphi? - PullRequest
6 голосов
/ 17 февраля 2011

Когда вы помечаете функцию как inline, вы намекаете компилятору, что эта функция является кандидатом для встраивания. Компилятор все еще может решить, что это не очень хорошая идея, и игнорировать ее.

  1. Есть ли способ узнать, встроена функция или нет, без использования дизассемблера? Может быть, есть предупреждение от компилятора, о котором я не знаю?

  2. Какие правила для встраивания используются компилятором? Существуют ли конструкции, которые приводят к тому, что функция никогда не становится встроенной, например?

Ответы [ 2 ]

7 голосов
/ 17 февраля 2011

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

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

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

2 голосов
/ 17 февраля 2011

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

Не думаю, что вы можете полагаться на подсказки, генерируемые компилятором.Он сообщает вам, когда он не встроен, потому что файл, в котором живет функция, отсутствует в интерфейсе использует предложение.Если это из-за других причин, это обычно не говорит вам.

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