GCC встраивает функции C++ без 'встроенного' ключевого слова?

pyPortMidi является оберткой Python PortMidi, который описан как "межплатформенная библиотека C для управления MIDI в реальном времени". Я не использовал его сам, но это выглядит очень перспективным. Явное упоминание о способности представить данные MIDI, в реальном времени.

30
задан Carl Seleborg 26 October 2009 в 17:49
поделиться

4 ответа

Да. Любой компилятор может встраивать любую функцию, когда считает, что это хорошая идея. GCC делает то же самое.

На уровне оптимизации -O2 встраивание выполняется, когда компилятор считает, что это стоит делать (используется эвристика) и , если не увеличивается размер кода. В -O3 это делается всякий раз, когда компилятор считает, что это стоит делать, независимо от того, увеличит ли он размер кода. Кроме того, на всех уровнях оптимизации (то есть при включенной оптимизации) статические функции, которые вызываются только один раз, встроены.

Как отмечено в комментариях ниже, эти -Ox фактически являются составными настройками, которые охватывают несколько более конкретные настройки, в том числе связанные с встраиванием (например, -finline-functions и т. д.),

37
ответ дан 27 November 2019 в 23:57
поделиться

Да, особенно если у вас включен высокий уровень оптимизации.

Есть флаг, который вы можете предоставить компилятору, чтобы отключить это: -fno-inline-functions.

8
ответ дан 27 November 2019 в 23:57
поделиться

Если вы используете '-finline-functions' или '-O3', он будет встроенными функциями. Вы также можете использовать '-finline_limit = N', чтобы настроить объем встраивания.

4
ответ дан 27 November 2019 в 23:57
поделиться

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

Для встроенных функций это ошибка из-за невозможности предоставить тело функции, если функция используется в какой-либо конкретной единице перевода, поэтому это не проблема.

2
ответ дан 27 November 2019 в 23:57
поделиться
Другие вопросы по тегам:

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