Урок 3. Перенос кода на 64-битные системы. За и против
- Продолжительность жизненного цикла приложений
- Требования к производительности приложения
- Использование в проекте сторонних библиотек
- Зависимости сторонних разработчиков от ваших библиотек
- Наличие 16-битных приложений
- Наличие кода на ассемблере
- Инструментарий
Начать освоение 64-битных систем следует с вопроса: "Насколько рационально пересобрать проект для 64-битной системы?". На этот вопрос надо обязательно дать ответ, но не торопясь, подумав. С одной стороны, можно отстать от своих конкурентов, вовремя не предложив 64-битные решения. С другой стороны, можно впустую потратить время на 64-битное приложение, которое не даст никаких конкурентных преимуществ.
Рассмотрим ряд факторов, которые помогут сделать выбор.
Продолжительность жизненного цикла приложений
Не следует создавать 64-битную версию приложения с коротким жизненным циклом. Благодаря подсистеме WoW64 старые 32-битные приложения достаточно хорошо работают на 64-битных Windows системах. Нерационально делать программу 64-битной, если через 2 года она перестанет поддерживаться. Практика показала, что переход на 64-битные версии Windows будет очень медленным и плавным. Возможно, большинство ваших пользователей в краткосрочной перспективе будут использовать только 32-битный вариант вашего программного решения. Следует учитывать, что этот курс был написан в 2009 году, когда большинство пользователей работало с 32-битными версиями операционных систем. Но со временем использование 32-битных программ будет выглядеть все более неестественным и отсталым.
Если планируется длительное развитие и длительная поддержка программного продукта, то следует начинать работать над 64-битным вариантом вашего решения. Спешить, конечно, не следует, но учтите, что чем дольше у вас не будет полноценного 64-битного варианта, тем больше сложностей будет возникать с поддержкой такого приложения, устанавливаемого на 64-битные версии Windows.
Требования к производительности приложения
Перекомпиляция программы для 64-битной системы позволит ей использовать огромные объемы оперативной памяти, а также повысит скорость ее работы на 5-15%. Повышение скорости работы на 5-10% произойдет за счет использования архитектурных возможностей 64-битного процессора, например, большего количества регистров. Еще 1-5% прироста скорости обуславливается отсутствием прослойки WoW64, которая транслирует вызовы API между 32-битными приложениями и 64-битной операционной системой.
Например, компания Adobe заявляет, что новый 64-битный "Photoshop CS4" на 12% быстрее его 32-битной версии".
Колоссальный рост производительности могут получить приложения, работающие с большими объемами памяти. Такими программами могут быть графические редакторы, CAD-системы, САПР СБИС, базы данных, пакеты моделирования различных процессов. Возможность разместить все данные в памяти и, следовательно, отсутствие необходимости их подгрузки с жесткого диска может ускорить работу таких приложений уже не на проценты, а в разы.
В качестве примера можно привести интеграцию Альфа-Банком в свою IT-инфраструктуру платформы на базе Itanium 2. Рост инвестиционного бизнеса банка привел к тому, что система в имеющейся конфигурации перестала справляться с возрастающей нагрузкой: задержки в обслуживании пользователей временами достигали критической отметки. Анализ ситуации показал, что узким местом системы является не производительность процессоров, а ограничение 32-разрядной архитектуры, в части подсистемы памяти, не позволяющей эффективно использовать больше 4 Гбайт адресного пространства сервера. Объем базы данных превышал 9 Гбайт. Использовалась она весьма интенсивно, что приводило к критической загрузке подсистемы ввода-вывода. Альфа-Банк принял решение о закупке кластера из двух четырехпроцессорных серверов на базе Itanium 2 с объемом оперативной памяти 12 Гбайт. Это решение позволило обеспечить необходимый уровень быстродействия и отказоустойчивости системы. По словам представителей компании, внедрение серверов на основе Itanium 2 позволило ликвидировать проблемы и достигнуть значительной экономии средств.
Использование в проекте сторонних библиотек
Прежде чем планировать работу над созданием 64-битной версий вашего продукта, выясните, имеются ли 64-битные варианты библиотек и компонентов, которые в нем используются. Также узнайте, какова ценовая политика по отношению к 64-битному варианту библиотеки. Все это можно выяснить, посетив сайт разработчика библиотеки. Если поддержка отсутствует, то заранее поищите альтернативные решения, поддерживающие 64-битные системы.
Зависимости сторонних разработчиков от ваших библиотек
Если вы разрабатываете библиотеки, компоненты или иные элементы, с помощью которых сторонние разработчики создают свое программное обеспечение, то вы должны проявить оперативность в создании 64-битного варианта своей продукции. В противном случае, ваши клиенты, заинтересованные в выпуске 64-битных версий, будут вынуждены искать альтернативные решения. Например, некоторые разработчики программно-аппаратной защиты откликнулись с большой задержкой на появление 64-битных программ, что заставило ряд клиентов выбрать другие инструменты для защиты своих программных продуктов.
Дополнительным преимуществом от выпуска 64-битной версии библиотеки является то, что вы можете продавать ее как отдельный продукт. Таким образом, ваши клиенты, желающие создавать как 32-битные, так и 64-битные приложения, будут вынуждены приобретать 2 различные лицензии. Например, такая политика используется компанией Spatial Corporation при продаже библиотеки Spatial ACIS.
Наличие 16-битных приложений
Если в ваших решениях все еще присутствуют 16-битные модули, то пора от них избавиться. Работа 16-битных приложений в 64-битных версиях Windows не поддерживается.
Здесь следует пояснить один момент, связанный с использованием 16-битных инсталляторов. Они до сих пор используются для установки некоторых 32-битных приложений. Создан специальный механизм, который на лету подменяет ряд наиболее популярных 16-битных инсталляторов на более новые версии. Это может вызвать неверное мнение, что 16-битные программы по-прежнему работают в 64-битной среде. Помните, это не так.
Наличие кода на ассемблере
Не забывайте, что использование большого объема кода на ассемблере может существенно повысить стоимость создания 64-битной версии приложения.
Инструментарий
Если, опираясь на изложенные выше факторы, вы приняли решение о разработке 64-битной версии вашего продукта и готовы потратить на это время, успех еще не гарантирован. Дело в том, что вы должны обладать всем необходимым инструментарием, и здесь могут быть скрыты неприятные казусы.
Самой очевидной, как и самой непреодолимой, может стать проблема отсутствия 64-битного компилятора. Когда писался этот текст (2009 год), все еще не существовало 64-битного компилятора C++ Builder от Embarcadero. Его выпуск ожидается только к концу 2009 года. Невозможно обойти подобную проблему, если, конечно, не переписать весь проект, например, с использованием Microsoft Visual Studio. Но если с отсутствием 64-битного компилятора все понятно, то другие аналогичные проблемы могут оказаться неявными и проявить себя уже на этапе работ по переносу проекта на новую архитектуру. Разумно заранее провести исследование: существуют ли все необходимые компоненты, которые потребуются для реализации 64-битной версии вашего продукта. Вас могут поджидать неприятные сюрпризы.
Принимая решение, помните о последнем факторе, который не упоминался, но весьма важен. Это фактор стоимости модернизации программного кода для компиляции в 64-битном режиме. Как рассчитать эту стоимость, будет рассказано в одном из уроков. Стоимость переноса кода может быть достаточно высокой и должна внимательно учитываться при составлении планов и определении сроков.
Авторы курса: Андрей Карпов (karpov@viva64.com), Евгений Рыжков (evg@viva64.com).
Правообладателем курса "Уроки разработки 64-битных приложений на языке Си/Си++" является ООО "Системы программной верификации". Компания занимается разработкой программного обеспечения в области анализа исходного кода программ. Сайт компании: http://www.viva64.com.