Семь шагов переноса программы в 64-битную систему

ОГЛАВЛЕНИЕ

Статья описывает основные шаги, требуемые для осуществления правильного переноса 32-битных приложений Windows в 64-битные системы Windows. Хотя статья предназначена для разработчиков, использующих C/C++ в среде Visual Studio 2005/2008, она также будет полезна для других разработчиков, намеревающихся перенести свои приложения в 64-битные системы.

Оглавление

Аннотация
Введение
1. Разбор разных 64-битных режимов
2. Выяснить, нужна ли 64-битная версия продукта

2.1. Длительность жизненного цикла приложений
2.2. Ресурсоемкость приложения
2.3. Разработка библиотек
2.4. Зависимость продукта от сторонних библиотек
2.5. Использование 16-битных приложений
2.6. Код на ассемблере

3. Инструментарий

3.1. 64-битный компилятор
3.2. 64-битные компьютеры под управлением 64-битных операционных систем
3.3. 64-битные версии всех используемых библиотек
3.4. Отсутствие встроенного кода на ассемблере
3.5. Обновление методики тестирования
3.6. Новые данные для тестирования
3.7. 64-битные системы защиты
3.8. Установочный пакет

4. Настройка проекта в Visual Studio 2005/2008
5. Компиляция приложения
6. Выявление скрытых ошибок

6.1. Явное преобразование типа
6.2. Неявное преобразование типа
6.3. Биты и сдвиги
6.4. Магические числа
6.5. Ошибки, касающиеся использования 32-битных переменных в качестве индексов
6.6. Ошибки, касающиеся изменения типов используемых функций
6.7. Выявление скрытых ошибок

7. Обновление процесса тестирования

Аннотация

Статья описывает основные шаги, требуемые для осуществления правильного переноса 32-битных приложений Windows в 64-битные системы Windows. Хотя статья предназначена для разработчиков, использующих C/C++ в среде Visual Studio 2005/2008, она также будет полезна для других разработчиков, планирующих перенести свои приложения в 64-битные системы.

Введение

Статья описывает основные проблемы, стоящие перед разработчиками, планирующими перенести 32-битные программы на 64-битные системы. Конечно, список рассмотренных проблем не исчерпывающий, но в дальнейшем будет создан более подробный список. Автор будет рад получить отклики, комментарии и вопросы, помогающие повысить информативность статьи.

1. Разбор разных 64-битных режимов

В рамках архитектуры компьютера под термином "64-битный" понимаются 64-битные целые числа и иные типы данных размером 64 бит. Под "64-битными" системами могут пониматься 64-битные архитектуры микропроцессора (например, EM64T, IA-64) или 64-битная операционная система (например, Windows XP x64 профессиональная версия).

AMD64 (или x86-64, Intel 64, EM64T, x64) - 64-битная архитектура микропроцессора и соответствующая система команд, разработанные компанией AMD. Эта система команд была лицензирована компанией Intel под именем EM64T (Intel64). Архитектура AMD64 является расширением архитектуры x86 с полной обратной совместимостью. Архитектура стала распространенной в качестве основного компонента персональных компьютеров и рабочих станций.

IA-64 - 64- битная архитектура микропроцессора, разработанная совместно компаниями Intel и Hewlett Packard. Она реализована в микропроцессорах Itanium и Itanium 2. Архитектура в основном используется в многопроцессорных серверах и кластерных системах.

AMD64 и IA-64 – две разные 64-битные архитектуры, несовместимые друг с другом. Поэтому разработчики должны сразу решить, нужна ли им поддержка обеих архитектур или лишь одной из них. Большей частью, если вы не разрабатываете узкоспециализированное программное обеспечение (ПО) для кластерных систем или не реализуете свою собственную высокопроизводительную СУБД, вам понадобиться реализовать поддержку только архитектуры AMD64, гораздо более популярной, чем IA-64. Это особенно касается ПО для рынка ПК, почти на 100% занятого архитектурой AMD64.
Далее в статье рассматривается только архитектура AMD64 (EM64T, x64), поскольку сейчас она наиболее актуальна для разработчиков прикладного ПО.

Говоря о разных архитектурах, надо упомянуть понятие "модель данных". Под моделью данных понимаются соответствия между размерами типов, принятых внутри среды разработки. Может иметься несколько средств разработки, придерживающихся разных типов данных для одной операционной системы. Но обычно преобладает только одна модель, максимально соответствующая аппаратно-программной среде. Таким примером является 64-битная Windows, исходная модель данных которой - LLP64. Но ради совместимости 64-битная Windows поддерживает выполнение 32-битных программ, работающих в режиме модели данных ILP32LL. Таблица 1 дает сведения об основных моделях данных.

Таблица 1. Модели данных.

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