Ответы пользователя по тегу GCC
  • Оптимизирует ли gcc геттеры/сеттеры без inline?

    @RPG
    Если тело геттера/сеттера находится в области видимости его использования, то вполне подставляет: goo.gl/zry8bv. Для этого достаточно флага -O2. Впрочем, пример натянутый и далёк от реальности.

    Однако в случае сложного кода (более 1 файла) перед разработчиком встанет выбор: оставить тело функции в заголовочном файле или же компилировать реализацию отдельно в другом cpp-файле. Если в заголовочном файле тела функции не окажется, компилятор будет вынужден сводить объектный код функции вместо исходного и нужно включить флаг -flto при компиляции.

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

    Мой совет - оставьте этот вопрос до тех пор, пока вы не обнаружите свой геттер или сеттер в верхней строчке профилировщика.

    UPD. Эксперимент с новым компилятором (gcc 4.9) показывает, что флаг -O2 -flto таки проводит межпроцедурную inline-оптимизацию автоматически, если это возможно. Второй из доступных мне компиляторов (gcc 4.4) этого делать не умеет - тут ещё нет поддержки LTO. Соответственно при использовании новых компиляторов действительно смысла в inline нет. Вот здесь файлы для тестирования: https://gist.github.com/scriptum/57ae4d2524d42fccb494
    Ответ написан
    1 комментарий