Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

реализация класса в .h файле хорошо или плохо? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Ошибка с полем в классе http://www.cyberforum.ru/cpp-beginners/thread939514.html
Пишу класс.Сюда его выкладывать не хочу,ибо он достаточно обширный.В классе доступе private задаю поле дескриптора файла.Тоесть что-то типо того: Class Myclass { private: HANDLE file; ......
C++ Сообщения между win32 приложениями Как отправить сообщение (аналог системных типа WM_DESTROY только свои) и обработать приемником? приёмник это обычное консольное win32 приложение(когда в визуале пустой проект win32 создаешь) http://www.cyberforum.ru/cpp-beginners/thread939505.html
Как назвать классы? C++
Сразу замечу, что дело происходит в 2D без физики, как таковой. 1) У меня есть классы: Mixer - звуковой движок Graphics - графический движок У звукового движка есть базовый класс: ...
C++ Не удается подключить к приложению gtest и свою статическую либу VS 2010
Здравствуйте, господа. Возникла проблема с линкером в VS 2010 после подключения к консольному приложению собственной же статической библиотеки. В солюшене 2 проекта: 1 - статическая библиотека, 2...
C++ Консоль для ведения логов http://www.cyberforum.ru/cpp-beginners/thread939483.html
Не уверен, что пишу туда, куда нужно, но есть только один способ узнать. Интересуют существующие решения по сабжу. Требования простые: - Минимум зависимостей - Цветной текст и фон - Динамические...
C++ Крутящееся колесо Может ли кто написать (срочно) программу крутящееся колесо, исходник чтобы был с комментариями. подробнее

Показать сообщение отдельно
Evg
Эксперт CАвтор FAQ
18029 / 6261 / 427
Регистрация: 30.03.2009
Сообщений: 17,200
Записей в блоге: 27
20.08.2013, 15:12
Цитата Сообщение от Убежденный Посмотреть сообщение
1) Реализация методов в хидере.

Время: 1 минута 3 секунды.

...

3) Реализация методов в отдельном файле + опция LTCG.

Время: 25 секунд.
Такие результаты всё-таки говорят о том, что в режиме LTCG они всё-таки имеют какие-то дополнительные настройки компилятора. В таком тесте (когда он сформирован в виде одного исходника) никакие межмодульные оптимизации не в состоянии ускорить в 2 раза. Более, чем уверен, что в режиме без LTCG для первого теста можно добавить пару опций (понять бы только, каких), которые дадут то же самое ускорение.

Цитата Сообщение от Убежденный Посмотреть сообщение
Кстати, в точности такой же результат получается, если использовать LTCG для реализации методов в хидере. Подтверждая, что компилятору без разницы, где находится определение - в заголовке или в файле реализации.
Как я уже говорил, режим LTCG попросту превращает несколько исходников в один. Что принципиально не отличается от реализации методов в хидере с точки зрения инлайна (главное, что компилятор их начинает видеть). Но, как я уже говорил, лично я считаю более правильным писать исходники так, как это представляли себе разработчики Си++, закладываясь не естественную (классическую) сборку, а не надеясь на то, что компилятор на твоей системе умеет работать в режиме с межмодульным инлайном

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

Добавлено через 7 минут
Цитата Сообщение от Evg Посмотреть сообщение
Отсутствие замедление компиляции на интеловском компиляторе навело на мысль, что они сохраняют одну из последних стадий представления (т.е. сильно оптимизированное представление, близкое к низкому уровню). На таком представлении уже технически более сложно проводить инлайн и последующие за этим оптимизации (а именно ради последующих оптимизаций и делается инлайн, который сам по себе большого смысла не несёт)
Результаты на -flto на втором примере говорят о том, что такое предположение неверно. Скорее всего, работает некая гибридная схема. Формируем полный код а рядом кладём промежуточное представление (во всяком случае в бинарнике есть и то, и другое). Далее на финальной стадии анализируем промежуточное представление. Если ничего интересного в плане инлайна не нашли, то оставляем код, если нашли, то выполняем инлайн и перекомпиляцию. Такой подход выглядит вполне разумно, если оно именно так и реализовано, то беру назад свои слова про то, что этот режим плохой.

Но в любом случае, рекомендация по написанию методов в хидере остаётся в силе
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru