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

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

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

Показать сообщение отдельно
Убежденный
Системный программист
 Аватар для Убежденный
14175 / 6190 / 982
Регистрация: 02.05.2013
Сообщений: 10,298
Завершенные тесты: 1
19.08.2013, 20:47     реализация класса в .h файле хорошо или плохо?
Цитата Сообщение от Evg Посмотреть сообщение
Возьмём проект из 1000 файлов *.cpp. Соберём их помодульно. Допустим, ушёл час времени. Поменяем один файл *.cpp (изменим реализацию интерфейса, что является наиболее частой операцией). Перекомпилируем. Пересборка займёт, условно говоря, несколько секунд, т.к. перекомпилироваться будет 1 файл, а не 1000. В случае режима с межмодульным инлайном при любом изменении в любом файле финальная межмодульная стадия компиляции будет работать по полной программе и займёт, условно говоря, столько же времени, сколько и полная сборка с нуля

Пока твой проект состоит из 10 файлов, разница между помодульным режимом в абсолютном времени будет небольшая. В проекте из 1000 файлов - разница будет огромная. Не говоря о том, что режим с межмодульным инлайном по времени работает далеко не линейно по отношению к количеству файлов. Увеличили количество файлов в 2 раза - время компиляции увеличится в 3, 5, 10 или хз сколько раз, но заведомо больше, чем в 2 раза. В противном случае межмодульная часть компилятора попросту работает некачественно
Скажите, как давно Вы последний раз работали с этим режимом ?
Спрашиваю, потому что написанное выше не соответствует действительности (а может, никогда
ей не соответствовало). При IPO повторная компиляция не выполняется. В Visual C++, например,
IPO - это некий промежуточный режим между компиляцией, когда код уже перенесен в промежуточное и
независимое от процессорной архитектуры представление, и компоновкой.

Время сборки увеличивается, но далеко не в такой прогрессии, как Вы указали.
Например, беру свой текущий проект: примерно 500 cpp-файлов, сборка под x86/amd64.
Общее время сборки порядка 3 минут (на Core-i5 2500). При этом треть этого времени составляет
сборка драйверов и компонентов, не относящихся к C++ и IPO. Да, и я имел дело с header-only
библиотеками, при подключении которых время сборки увеличивалось чуть ли не на порядок.
Не давая, по сути, ничего взамен. Ну кроме простоты сборки, разумеется, это вне вопросов.

Цитата Сообщение от Evg Посмотреть сообщение
Не надо путать оптимизации и режим работы. Раскрутка циклов - это оптимизация. Инлайн - это оптимизация. Режим IPO - это НЕ оптимизация, это режим, при котором у тебя попросту 100500 исходников склеиваются в один прозрачным для пользователя способом
IPO - это такая же оптимизация, как и все остальное.
Как формально (буква "О" в названии говорит сама за себя), так и по факту.
Но мы же не формалисты, нас ведь интересует практическое применение, а не навешивание ярлыков ?

Цитата Сообщение от Evg Посмотреть сообщение
Это стандартный узаконненный способ вешать лапшу на уши пользователям.
Разумеется.
А знаете, в чем прелесть IPO ? В том, что для его использования не нужно прикладывать
никаких усилий. Он просто включен по умолчанию. Думаю, большинство пользователей, особенно
начинающих, вообще не знают, что их компилятор использует IPO. И тем не менее, получают
все выгоды от него.

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

Цитата Сообщение от Evg Посмотреть сообщение
Сделать режим для криворуких программистов, которые вообще не понимают (и не хотят понимать), как работает компилятор в первом приближении и как устроены машинные коды. На банере яркими буквами пишется, что, дескать, программируйте и не задумывайтесь ни о чём, наш супер-пупер межмодульный режим сделает вас абсолютно щастливыми
Ваша реакция понятна. Хотя я, честно говоря, ожидал что-то в духе: "оу, круто, надо будет
испытать эту штуку".

Цитата Сообщение от Evg Посмотреть сообщение
Про время компиляции и неудобство разработки уже говорил.
Время компиляции увеличивается незначительно. Не факт, что при использовании реализации в
хидерах оно было бы меньше. При прочих равных условиях. Ну а неудобство... В чем оно ?
Я могу писать код в хидерах. А могу в cpp-файлах. И, что хорошо, сгенерированный
машинный код будет практически эквивалентным. Где здесь неудобство ?
Вижу только одно "неудобство" - программисты, выросшие на современных компиляторах,
не знают что такое инлайнинг по своей сути. И как его правильно готовить. Хотя это неудобство -
оно для кого ? Для корифеев, которые ноют "вот раньше были времена, а сейчас молодежь не та" ?
Ну так может пора ему уже на свалку, этому инлайнингу, раз он не играет существенной роли в
оптимизации ?

Цитата Сообщение от Evg Посмотреть сообщение
Есть ещё такая вещь, как преносимость. Т.е. пока мы живём на компиляторе, в котором этот режим есть, у нас программа более-меднее производительно работает. Как только перешли на другую платформу, где этого режима нет, получили дерьмовый код.
Это совсем не довод.
Вы же не сидите с утра до ночи на чемоданах, в ожидании "а вдруг уехать придется" ?
Надо будет переходить на другую платформу - будем принимать соответствующие меры.
"Всепогодный" код а-ля Boost, который должен работать везде и всегда, нужен лишь в особых
случаях, и это обычно оговаривается сразу. Сейчас я живу на Windows, здесь три наиболее
ярких компилятора - это Visual C++, Intel C++ и MinGW. Все они поддерживают IPO уже
не первый год, поэтому не вижу смысла искать здесь причины, чтобы его не использовать.

Цитата Сообщение от Evg Посмотреть сообщение
Пример можно? Имеется в виду пример того, как наступишь, а потом долго ищешь причину
Да пожалуйста - разные версии хидера и библиотечного файла. Или разные определения
одного и того же метода в h и cpp. Это не во всех ситуациях отслеживается компилятором, а
потом такую ошибку можно искать очень долго. При единообразном подходе (реализация или
только в cpp, или только в h) она менее вероятна.

Цитата Сообщение от Evg Посмотреть сообщение
"И то, и другое" - это что?
Я имел в виду, что писать код, заранее прикидывая степень его "заинлайненности" -
это преждевременная оптимизация. Как в случае IPO, так и в случае реализации в хидерах.
 
Текущее время: 00:59. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru