Вопрос

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

Это было полезно?

Решение

Кроме, посмотрев на созданный код, нет. Некоторые реализации могут предоставить эту информацию, но она не требуется стандартом.

Вещи как inline или register (шуддер) предложения Для компилятора, и это бесплатно принять их, игнорировать их или даже лгать вам, что это сделано, пока тайно собирается за спиной и не делать это :-)

Я, как правило, не использовать такие функции, поскольку я подозреваю, что компилятор часто знает лучше, чем я, как сделать самую производительность из моего кода.

Другие советы

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

Но это может доказать, что он включен: если вы знаете A вызовы B, который звонит C, а также A Никогда не звонит C напрямую, если вы видите A призыв C в стеке вызов, вы знаете, B был установлен на этот звонок.

Установите компилятор для генерации кода ассемблера и проверьте там.

Прочитайте разборку файла объекта.

Нет способа узнать, кроме как смотреть на выходной ассемблер.

Компиляторы в эти дни «умны», и они решают, какие функции встроены и в каких случаях.

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

Я не думаю, что есть способ узнать, что вы хотите,

Но вы можете увеличить возможные возможности функции, являющиеся встроенной функцией,

Создание определения функции, видимой в блок перевода, в котором он называется. Т.е. вы всегда должны поместить определение встроенной функции в заголовочном файле.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top