﻿# Урок 3\. Перенос кода на 64\-битные системы\. За и против

Начать освоение [64\-битных](https://pvs-studio.ru/ru/blog/terms/0001/) систем следует с вопроса: "Насколько рационально пересобрать проект для 64\-битной системы?"\. На этот вопрос надо обязательно дать ответ, но не торопясь, подумав\. С одной стороны, можно отстать от своих конкурентов, вовремя не предложив 64\-битные решения\. С другой стороны, можно впустую потратить время на 64\-битное приложение, которое не даст никаких конкурентных преимуществ\.

Рассмотрим ряд факторов, которые помогут сделать выбор\.

## Продолжительность жизненного цикла приложений

Не следует создавать 64\-битную версию приложения с коротким жизненным циклом\. Благодаря подсистеме [WoW64](https://pvs-studio.ru/ru/blog/terms/0056/) старые 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](mailto:karpov@viva64.com)\), Евгений Рыжков \([evg@viva64\.com](mailto:evg@viva64.com)\)\._

_Правообладателем курса "Уроки разработки 64\-битных приложений на языке Си/Си\+\+" является ООО "Системы программной верификации"\. Компания занимается разработкой программного обеспечения в области анализа исходного кода программ\. [Сайт компании](https://pvs-studio.ru/ru/pvs-studio/)\._