Почему бы не пометить все в строке? - PullRequest
46 голосов
/ 22 октября 2010

Прежде всего, я не ищу способ заставить компилятор встроить реализацию каждой функции.

Чтобы снизить уровень ошибочных ответов, убедитесь, что вы понимаете, что на самом деле означает ключевое слово inline. Вот хорошее описание, встроенный против статического против внешнего .

Итак, мой вопрос, почему бы не отметить каждое определение функции inline? т.е. в идеале единственной единицей компиляции будет main.cpp. Или, возможно, еще несколько для функций, которые не могут быть определены в заголовочном файле (идиома pimpl и т. Д.).

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

Кто-нибудь пробовал это с реальным приложением? Производительность увеличилась? уменьшить?!?

Каковы недостатки маркировки всех определений функций inline?

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

Все эти недостатки влияют только на разработчика. Каковы недостатки времени выполнения?

Ответы [ 11 ]

0 голосов
/ 22 октября 2010

Проблема с встраиванием заключается в том, что вы хотите, чтобы высокопроизводительные функции помещались в кеш. Вы могли бы подумать, что служебные вызовы - это большой удар по производительности, но во многих архитектурах пропадание кэша вызовет у пары толчок и выскочит из воды. Например, если у вас есть большая (возможно, глубокая) функция, которую нужно очень редко вызывать из вашего основного высокопроизводительного пути, это может привести к тому, что ваш основной высокопроизводительный цикл вырастет до уровня, который не помещается в icache L1. Это замедлит ваш код, намного больше, чем случайный вызов функции.

...