- Любовные романы
- Фантастика и фэнтези
- Ненаучная фантастика
- Ироническое фэнтези
- Научная Фантастика
- Фэнтези
- Ужасы и Мистика
- Боевая фантастика
- Альтернативная история
- Космическая фантастика
- Попаданцы
- Юмористическая фантастика
- Героическая фантастика
- Детективная фантастика
- Социально-психологическая
- Боевое фэнтези
- Русское фэнтези
- Киберпанк
- Романтическая фантастика
- Городская фантастика
- Технофэнтези
- Мистика
- Разная фантастика
- Иностранное фэнтези
- Историческое фэнтези
- LitRPG
- Эпическая фантастика
- Зарубежная фантастика
- Городское фентези
- Космоопера
- Разное фэнтези
- Книги магов
- Любовное фэнтези
- Постапокалипсис
- Бизнес
- Историческая фантастика
- Социально-философская фантастика
- Сказочная фантастика
- Стимпанк
- Романтическое фэнтези
- Ироническая фантастика
- Детективы и Триллеры
- Проза
- Юмор
- Феерия
- Новелла
- Русская классическая проза
- Современная проза
- Повести
- Контркультура
- Русская современная проза
- Историческая проза
- Проза
- Классическая проза
- Советская классическая проза
- О войне
- Зарубежная современная проза
- Рассказы
- Зарубежная классика
- Очерки
- Антисоветская литература
- Магический реализм
- Разное
- Сентиментальная проза
- Афоризмы
- Эссе
- Эпистолярная проза
- Семейный роман/Семейная сага
- Поэзия, Драматургия
- Приключения
- Детская литература
- Загадки
- Книга-игра
- Детская проза
- Детские приключения
- Сказка
- Прочая детская литература
- Детская фантастика
- Детские стихи
- Детская образовательная литература
- Детские остросюжетные
- Учебная литература
- Зарубежные детские книги
- Детский фольклор
- Буквари
- Книги для подростков
- Школьные учебники
- Внеклассное чтение
- Книги для дошкольников
- Детская познавательная и развивающая литература
- Детские детективы
- Домоводство, Дом и семья
- Юмор
- Документальные книги
- Бизнес
- Работа с клиентами
- Тайм-менеджмент
- Кадровый менеджмент
- Экономика
- Менеджмент и кадры
- Управление, подбор персонала
- О бизнесе популярно
- Интернет-бизнес
- Личные финансы
- Делопроизводство, офис
- Маркетинг, PR, реклама
- Поиск работы
- Бизнес
- Банковское дело
- Малый бизнес
- Ценные бумаги и инвестиции
- Краткое содержание
- Бухучет и аудит
- Ораторское искусство / риторика
- Корпоративная культура, бизнес
- Финансы
- Государственное и муниципальное управление
- Менеджмент
- Зарубежная деловая литература
- Продажи
- Переговоры
- Личная эффективность
- Торговля
- Научные и научно-популярные книги
- Биофизика
- География
- Экология
- Биохимия
- Рефераты
- Культурология
- Техническая литература
- История
- Психология
- Медицина
- Прочая научная литература
- Юриспруденция
- Биология
- Политика
- Литературоведение
- Религиоведение
- Научпоп
- Психология, личное
- Математика
- Психотерапия
- Социология
- Воспитание детей, педагогика
- Языкознание
- Беременность, ожидание детей
- Транспорт, военная техника
- Детская психология
- Науки: разное
- Педагогика
- Зарубежная психология
- Иностранные языки
- Филология
- Радиотехника
- Деловая литература
- Физика
- Альтернативная медицина
- Химия
- Государство и право
- Обществознание
- Образовательная литература
- Учебники
- Зоология
- Архитектура
- Науки о космосе
- Ботаника
- Астрология
- Ветеринария
- История Европы
- География
- Зарубежная публицистика
- О животных
- Шпаргалки
- Разная литература
- Зарубежная литература о культуре и искусстве
- Пословицы, поговорки
- Боевые искусства
- Прочее
- Периодические издания
- Фанфик
- Военное
- Цитаты из афоризмов
- Гиды, путеводители
- Литература 19 века
- Зарубежная образовательная литература
- Военная история
- Кино
- Современная литература
- Военная техника, оружие
- Культура и искусство
- Музыка, музыканты
- Газеты и журналы
- Современная зарубежная литература
- Визуальные искусства
- Отраслевые издания
- Шахматы
- Недвижимость
- Великолепные истории
- Музыка, танцы
- Авто и ПДД
- Изобразительное искусство, фотография
- Истории из жизни
- Готические новеллы
- Начинающие авторы
- Спецслужбы
- Подростковая литература
- Зарубежная прикладная литература
- Религия и духовность
- Старинная литература
- Справочная литература
- Компьютеры и Интернет
- Блог
C++. Сборник рецептов - Д. Стефенс
Шрифт:
Интервал:
Закладка:
Большинство наборов инструментов предлагает несколько опций оптимизации, а некоторые даже десятки. Какие оптимизации следует выбрать, зависит от требований к проекту. Например, во встраиваемых системах может потребоваться выбрать оптимизации, которые ценой некоторого уменьшения скорости приводят к созданию меньших по размеру исполняемых файлов. В других случаях приоритет может отдаваться скорости. Некоторые оптимизации сделают программу быстрее на одной платформе, но медленнее на другой. Вы можете даже столкнуться с тем, что некоторые опции сделают отдельные части программы быстрее, а другие части — медленнее.
Таблицы 1.26 и 1.27 показывают опции обобщенных оптимизаций, но для достижения наилучших результатов следует тщательно рассмотреть все требования, изучить документацию по инструментарию и провести всестороннее тестирование.
Эта ситуация аналогична встраиванию, хотя обычно инструментарии предоставляют значительно меньше опций для встраивания, чем для других оптимизаций
Смотри такжеРецепт 1.21.
1.23. Указание варианта библиотеки времени выполнения
ПроблемаВаш инструментарий поставляется с несколькими вариантами базовых библиотек времени выполнения, и вы хотите указать компилятору и компоновщику тот вариант, который должен использоваться.
РешениеБиблиотеки времени выполнения, поставляемые с данным инструментарием, могут различаться по тому, являются ли они одно- или многопоточными, статическими или динамическими и содержат ли они отладочную информацию или нет.
При использовании Boost.Build эти три выбора можно сделать, использовав функции threading, runtime-link и variant, описанные в табл. 1.15. Например, чтобы указать статическую библиотеку времени выполнения, добавьте к требованиям цели <runtime-link>static или используйте опцию командной строки runtime-link=static. Чтобы указать многопоточную библиотеку времени выполнения, добавьте к требованиям цели <threading>multi или используйте опцию командной строки threading=multi.
При сборке из командной строки используйте опции компилятора и компоновщика, представленные в таблицах с 1.30 до 1.36. Опции командной строки и имена библиотек для отладочной и окончательной конфигураций обычно очень похожи. В следующих таблицах буквы в квадратных скобках добавляются только для отладочных конфигураций. Имена динамических вариантов библиотек времени выполнения показаны в круглых скобках. При выборе динамической компоновки эти библиотеки должны быть доступны при выполнении программы.
Табл. 1.30. Опции компилятора для выбора библиотеки времени выполнения при использовании Visual C++ или Intel (Windows)
Статическая компоновка Динамическая компоновка Однопоточная -ML[d]¹ Неприменимо Многопоточная -MT[d] -MD[d](msvcrt[d].dll, msvcr80[d].dll)²¹ Начиная с Visual Studio 2005, в момент написания книги, находящейся в стадии бета-тестирования, опции -ML и -MLd считаются устаревшими, а однопоточные статические библиотеки времени выполнения больше не поставляются.
² Предыдущие версии Visual C++ использовали DLL msvcr71.dll, msvcr71d.dll, msvcr70.dll, msvcr70d.dll и т.д.
Табл. 1.31. Опции компилятора для выбора библиотеки времени выполнения при использовании Metrowerks (Windows)
Статическая компоновка Динамическая компоновка Однопоточная -runtime ss[d] Неприменимо Многопоточная -runtime sm[d] -runtime dm[d](MSL_All-DLL90_x86[_D].dll)Табл. 1.32. Опции командной строки для выбора библиотеки времени выполнения при использовании CodeWarrior 10 для Max OS X
Статическая компоновка Динамическая компоновка Опции не требуется Обратитесь к документации Metrowerks по опциям командной строки (MSL_All_Mach-O[_D].dylib)Табл. 1.33. Опции компилятора для выбора библиотеки времени выполнения при использовании Borland
Статическая компоновка Динамическая компоновка Однопоточная -WM -WM- -WR -WC¹ (cc3260.dll) Многопоточная -WM -WM -WR -WC (cc3260mt.dll)¹ Опция -WC требуется только при сборке консольного приложения.
Табл. 1.34. Опции компилятора для выбора библиотеки времени выполнения при использовании Digital Mars (все библиотеки времени выполнения многопоточны)
Статическая компоновка Динамическая компоновка Опций не требуется -ND -D_STLP_USE_DYNAMIC_LIB(sccrt70.dll, stlp45dm.dll)Табл. 1.35. Опции компилятора для выбора библиотеки времени выполнения при использовании GCC
Статическая компоновка Динамическая компоновка -static¹ Опций не требуется¹ Эта опция отключает всю динамическую компоновку, а не только динамические библиотеки времени выполнения.
Например, чтобы указать динамическую окончательную сборку библиотеки времени выполнения Visual С++, используйте опцию компилятора -MD. Чтобы указать статическую однопоточную отладочную сборку библиотеки времени выполнения Metrowerks для Windows, используйте опцию компилятора -runtime ssd. Чтобы указать однопоточную динамическую сборку библиотеки времени выполнения Borland, передайте компилятору и компоновщику опции -WM- -WR -WC.
Инструкции для указания варианта библиотеки времени выполнения в IDE приведены в табл. 1.36.
Табл. 1.36. Указание варианта библиотеки времени выполнения из IDE
IDE Конфигурация Visual C++ На страницах свойств проекта перейдите к Configuration Properties→C/C++→Code Generation (Генерация кода) и используйте раскрывающийся список Runtime Library (библиотека времени выполнения) CodeWarrior Для проектов динамических библиотек добавьте в проект объектный файл /usr/lib/dylib1.o и библиотеки MSL_Shared_AppAndDylib_Runtime[_D].lib и MSL_All_Mach-O[_D].dylib и удалите все библиотеки вида MSL_<XXX>_Mach-O[_D].lib. Для проектов исполняемых файлов добавьте в проект объектный файл /usr/lib/crtl.с и библиотеки MSL_Shared_AppAndDylib_Runtime[_D].lib и MSL_All_Mach-O[_D].dylib и удалите все библиотеки вида MSL_<XXX>_Mach-O[_D].lib C++Builder Будет ли проект одно- или многопоточным, должно быть указано при его создании. Чтобы выбрать статическую или динамическую библиотеку времени выполнения, в окне Project Options перейдите к Linker и установите или снимите флажок Use dynamic RTL (Использовать динамические библиотеки времени выполнения) Dev-C++ Чтобы выбрать статическую библиотеку времени выполнения, укажите опцию командной строки -static, как описано в рецепте 1.20 ОбсуждениеБиблиотека времени выполнения содержит реализации вспомогательных функций, необходимых при выполнении программы. Обычно библиотека времени выполнения содержит реализации функций стандартной библиотеки С, функций, используемых для доступа к сервисам операционной системы, таким как потоки и файловые системы, и специфичных для платформы, и функций, предоставляющих инфраструктуру для функций языка С++, таких как информация о типах во время выполнения (RTTI) и обработка исключений.
В большинстве случаев, чем больше у вас выбор, тем лучше. Однако слишком большое количество библиотек времени выполнения приводит к различным проблемам. Главной проблемой является гарантия того, что все компоненты приложения — статические библиотеки, динамические библиотеки и исполняемые файлы — используют один и тот же вариант библиотеки времени выполнения, Если это не так, то приложение может не скомпоноваться или в нем могут появиться сложные с точки зрения диагностики сбои.

