Делая длинную функцию встроенной - PullRequest
3 голосов
/ 06 апреля 2011

Предположим, у меня есть функция из 10 строк. Если я добавлю встроенное ключевое слово, скажем, есть вероятность, что компилятор сделает его встроенным на 50%.

Если у меня есть двухстрочная функция, вероятность того, что она будет встроена, может составлять 90%.

Могу ли я разделить код в 10-строчной функции на 5 функций, чтобы сделать его встроенным с большей вероятностью?

Ответы [ 2 ]

4 голосов
/ 06 апреля 2011

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

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

В зависимости от вашего компилятора C ++, вы можете заставить его встроить функцию. Visual C ++ имеет атрибут __forceinline, а также параметр для обработки встраивания и как часто его следует использовать в настройках проекта. Как отмечает Тони, эквивалент GCC равен __attribute__((always_inline)).

Вы также можете использовать некоторые хитрости препроцессора для вставки самого кода, но я бы не рекомендовал этого.

3 голосов
/ 06 апреля 2011

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

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