можно ли установить 64 разрядную программу на 32 разрядную систему

Запускаем 64-разрядные приложения на 32-разрядной Windows

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

Подготовка компьютера

Поскольку для использования виртуальной машины может потребоваться от 1 до 2 Гбайт на компьютере-хосте, нужно будет закрыть абсолютно все ненужные в данный момент приложения, чтобы она не испытывала нехватку ресурсов. Также нелишним будет увеличение объема области подкачки, который задается вручную. Минимальный размер – не менее 3 Гбайт, а максимальный – не более 15 Гбайт.

Если есть необходимость воспользоваться браузером и другими прикладными программами, то их нужно запускать на виртуальной машине, а не на хостовом компьютере.

Проверить, поддерживает ли процессор 64-битовую архитектуру, можно с помощью свойств системы, а также приложений AIDA64 или Speccy. В последней программе на это укажет строка Intel 64 для одноименных ЦПУ. Кроме того, объем оперативной памяти на хост-ПК должен составлять не менее 4 Гб, если планируется запуск 64-рязрядных приложений, как будет описано ниже.

Создание виртуальной машины

Этот способ — один из наиболее эффективных. В некоторых случаях — это единственная возможность запустить 64-разрядное приложение на системе x86 без ее переустановки.
Для использования на ОС Windows существует несколько видов ПО для виртуализации. Их краткий список приведён ниже:
• Oracle VM Virtual Box. Распространяется бесплатно и позволяет запускать на основном компьютере разнообразные операционные системы. Поддерживает аппаратную и программную виртуализацию. Подходит для рядовых пользователей.
• VMware Workstation. Обладает более широкими возможностями и повышенной надежностью. Распространяется платно. Лучше всего подходит для профессионалов и опытных специалистов.
Создание виртуального ПК для запуска 64-битовых приложений без переустановки системы будет рассмотрено на примере VM VirtualBox.
В окне мастера на первом этапе нужно указать тип виртуальной машины (ВМ) – Microsoft Windows и версию (чаще всего – это 8.1 или 10 — 64 бита). Далее, на следующем шаге следует указать, сколько аппаратной памяти на ПК нужно выделить для ВМ.
К виртуальной машине для запуска 64-битовых приложений предъявляются более жесткие требования, чем обычно. Для ВМ выделяют как можно больше памяти, чтобы игры и программы могли запускаться и работать хотя бы на минимальных настройках. Вначале указывают 1,5 Гбайта. Если VirtualBox по мере использования выдаст сообщение о прерывании работы ВМ из-за нехватки ресурсов хост-компьютера, то выделенный объем уменьшают на 100-200 Мбайт. Если же на момент создания ВМ свободно более 1,5 Гб аппаратной оперативы, то выделенный объем памяти, наоборот, повышают на 100-200 Мб. Не стоит забывать, что для хост-системы нужно оставить запас в 150-250 Мб.
На третьем шаге создают виртуальный фиксированный жесткий диск объемом – не менее 60 Гб. Затем присоединяют образ 64-разрядной системы. Эту операцию можно также сделать позже, во время запуска.
В настройках созданной виртуальной машины задают дополнительные параметры:
• Устанавливают флажок включения PAE/NX.
• Увеличивают количество ядер виртуального ЦПУ до 4, а объем видеопамяти – до 128 Мбайт.
Когда ВМ будет сконфигурирована, можно выполнять запуск и установку гостевой системы. Это может занять от 0,5 до 2 часов в зависимости от производительности основного компьютера. Сразу после завершения установки нужно инсталлировать пакет дополнений гостевой ОС, который скачивают с сайта. Вслед за этим виртуальную машину перезагружают и активируют.

Установка 64-разрядных программ

Виртуальная система может получить необходимые файлы несколькими способами:
• Путем скачивания из Интернета (браузер Microsoft Edge для этого подойдет).
• Через дисковод, который можно подключить в меню главного окна.
• Из любой папки на хост-компьютере, которую нужно добавить в раздел общих папок, а затем подключить в гостевой ОС, как сетевой диск.
Вначале на гостевой ОС нужно закрыть все ненужные приложения. Затем приступают к установке требуемой 64-разрядной программы. Когда процесс завершится, нужно проверить, запускается ли приложение, поскольку некоторые из них могут работать некорректно на виртуальных машинах. Пример такой программы — UVScreenCamera.
Если игра запустилась, то нужно выставить минимальные настройки графики и попытаться пройти простое испытание. Картинка должна отрисовываться, по возможности, плавно, а звук – идти без перебоев. В этом случае можно повысить разрешение экрана во время игры, например, с 640 на 480 пикселей до 800 на 600 пикселей.

Заключение

Таким образом, запустить 64-разрядные приложения на 32-разрядной системе Windows становится возможным благодаря технологиям виртуализации, с помощью которых можно создать еще одну ОС нужной архитектуры. Единственный недостаток – неполное использование ресурсов хостового ПК.

Источник

Как на 64-битной Windows запустить программы в режиме совместимости

Если в новой 64-битной Windows старая 32-битная программа не запускается или работает неправильно, вы можете запустить ее в режиме совместимости. CHIP расскажет, как это сделать.

Современные компьютеры в большинстве случаев поставляются с установленной операционной системой Windows 10 64 bit. Даже бюджетные модели уже имеют 3 и более Гбайт оперативной памяти, что позволяет задействовать системе всю мощь 64-битной разрядности обработки данных.

Подробнее о преимуществах 64 bit над 32 bit Windows вы можете прочитать в нашей статье «Преимущества перехода на 64 бита».

Но, как бы не была привлекательна 64-разрядная система, зачастую пользователь просто не имеет в своем распоряжении 64-битной программы, с которой он давно работает и которая его полностью устраивает, т.к. производитель ее просто не выпустил. Как правило, такие программы устанавливаются в Windows в отдельную папку \Program Files (x86) и их запуск осуществляется в 32-разрядном режиме.

Если в процессе запуска программа выдает ошибку или вообще не запускается, а в Windows 32 bit она работала без проблем, есть шанс запустить ее в специальном режиме, который разработчики назвали «Режим совместимости».

Для этого в Windows 7 щелкните правой кнопкой мыши на ярлыке нужной программы, а затем выберите в контекстном меню «Свойства». В открывшемся окне перейдите на вкладку «Совместимость» и установите флажок «Запустить программу в режиме совместимости с …» и в выпадающем списке укажите вариант системы для запуска.
Нажмите кнопку «OK». После этого попробуйте запустить вашу программу.

Кроме того, в контекстном меню Проводника также имеет смысл попытаться автоматически решить задачу, кликнув по строке «Исправление неполадок совместимости» — в Windows 7.

В Windows 10 при настройке запуска в совместимом режиме на вкладке «Совместимость» имеется отдельная кнопка «Запустить средство устранения проблем с совместимостью». После чего вам предложат либо использовать рекомендованные параметры, либо провести диагностику программы.

Если и после этого программа не запустилась, то стоит подойти к проблеме более основательно и попробовать варианты, указанные на официальном сайте Microsoft.

Более радикальным методом запуска программы является ее установка и использование в виртуальной машине с установленной Windows 7 32 bit. Подробнее, как установить и настроить виртуальную машину вы можете почитать в нашей статье «Как создать и настроить на ПК виртуальную ОС?».

Источник

Можно ли запустить 64-битное приложение в 32-битной системе

В связи с этим у пользователей 32-битных Windows может возникнуть вопрос: а нельзя ли каким-то образом обойти это ограничение?

Да, такой способ существует, но работать он будет только при одном условии, — если процессор поддерживает 64-разрядную архитектуру.

Более того, на машине с таким процессором возможна установка только 32-разрядной Windows или другой ОС. Для определения разрядности процессора в Windows 7 и более старых ОС можно воспользоваться встроенной консольной утилитой systeminfo или сторонним приложением CPU-Z.

Выполните в командной строке systeminfo и посмотрите, что указано в пункте «Процессор ».

x64 укажет на 64-разрядный ЦП, а x86 — на старый 32-битный. В CPU-Z на 64-разрядный ЦП укажут маркеры х86-64 или ЕМ64Т в блоке «Instructions», если процессор окажется 32-битным, указанные маркеры будут отсутствовать.

С разрядностью разобрались, теперь что до установки 64-разрядного софта на 32-битные Windows.

Напрямую установить и запустить 64-битную программу на такую ОС не получится, но вы можете воспользоваться любым гипервизором, тем же VirtualBox, создав в нём 64-битную виртуальную машину и установив на нее 64-разрядную Windows.

Другое дело, будете ли вы довольны результатом такой виртуализации.

Источник

Обзор соображений совместимости для 32-битных программ для 64-битных версий Windows

В этой статье рассматриваются соображения совместимости и ограничения для 32-битных программ, работающих на 64-битных версиях Windows.

Применяется к: Windows 10 — все выпуски, Windows Server 2012 R2
Исходный номер КБ: 896456

Сводка

В 64-битных версиях Windows подсистема Microsoft Windows-32-on-Windows-64 (WOW64) для запуска 32-битных программ без изменений. 64-битные версии Windows не поддерживают 16-битные и 32-битные драйверы. Программы, зависят от 16-битных сеяных или 32-битных драйверов, не могут работать на 64-битных версиях Windows, если производитель программы не предоставляет обновление для программы.

Могут возникнуть соображения, влияющие на совместимость или производительность программы. Вы можете определить, будет ли программа иметь проблемы с совместимостью или производительностью, опробовав программу на одной из 64-битных версий Windows.

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

Введение

X64-версии Microsoft Windows оптимизированы для запуска 64-битных программ. Кроме того, x64-версии Windows подсистемы WOW64 для запуска 32-битных программ.

Запуск 32-битных программ

Подсистема WOW64 позволяет 32-битным программам работать без изменений в x64-версиях Windows. Подсистема WOW64 создает 32-битную среду в версиях x64 Windows. Дополнительные сведения о подсистеме WOW64 см. в разделе «Запуск 32-битных приложений» в разделе 64-bit Windows документации microsoft Platform SDK. Чтобы просмотреть этот документ, посетите следующий веб-сайт Microsoft: Запуск 32-битных приложений

Соображения производительности программы

Подсистема WOW64 создает 32-битную среду на основе x64 версий Windows. Некоторые 32-битные программы могут работать в этих операционных системах медленнее, чем в 32-битных версиях Windows. Кроме того, некоторые 32-битные программы, которые требуют много воспоминаний, могут демонстрировать повышенную производительность в x64-версиях Windows. Это увеличение производительности происходит потому, что x64-версии Windows поддерживают больше физической памяти, чем 32-битные версии Windows.

Дополнительные сведения о различиях в управлении памятью между 64-битными и 32-битными версиями Windows см. в разделе «Виртуальное адресное пространство» в разделе «Управление памятью» документации microsoft Platform SDK. Чтобы просмотреть этот документ, посетите следующий веб-сайт Microsoft: виртуальное пространство адресов

Ограничения подсистемы WOW64

Подсистема WOW64 не поддерживает следующие программы:

16-битные программы

X64-версии Windows не поддерживают 16-битные или 16-битные компоненты программы. Эмуляция программного обеспечения, необходимая для запуска 16-битных программ в версии Windows x64, значительно снизит производительность этих программ.

16-битный установщик часто используется для установки и настройки 32-битной программы. Кроме того, некоторые 32-битные программы требуют правильного запуска 16-битных компонентов. Хотя 32-битные программы с 16-битным компонентом могут работать правильно после установки, 16-битный установщик не может установить 32-битную программу. Программы, для работы с 16-битным компонентом не могут работать на x64-версии Windows.

Если 32-битная программа с 16-битным компонентом попытается запустить 16-битный файл или компонент, 32-битная программа будет входить в журнал system сообщение об ошибке. После этого операционная система позволит 32-битной программе справиться с ошибкой.

Чтобы определить, требуется ли для программы 16-битный компонент, установите и запустите программу. Если программа создает сообщение об ошибке, обратитесь к производителю программы для обновления, совместимого с x64-версиями Windows.

32-битные драйверы

X64-версии Windows не поддерживают 32-битные драйверы. Все драйверы аппаратных устройств и драйверы программ должны быть компилируются специально для x64-версии Windows.

Если 32-битная программа пытается установить 32-битный драйвер на компьютере с версией Windows x64, установка драйвера не удается. Когда такое поведение происходит, x64-основанная версия Windows сообщает об ошибке в 32-битную программу.

Если 32-битная программа пытается зарегистрировать 32-битный драйвер для автоматического запуска на компьютере с версией Windows на основе x64, загрузчик загрузки на компьютере распознает, что 32-битный драйвер не поддерживается. X64-версия Windows не запустит 32-битный драйвер, но запустит другие зарегистрированные драйверы.

Чтобы определить, требуется ли программе 32-битный драйвер, установите и запустите программу. Если программа создает сообщение об ошибке, обратитесь к производителю программы для обновления, совместимого с x64-версиями Windows.

Дополнительные рекомендации

Перенаправление реестра и файлов

Дополнительные сведения о перенаправлении файловой системы и реестра см. в разделе «Запуск 32-битных приложений» в разделе 64-bit Windows документации microsoft Platform SDK. Чтобы просмотреть этот документ, посетите следующий веб-сайт Microsoft: Запуск 32-битных приложений
Подсистема WOW64 перенаправляет 32-битные двоичные вызовы, не требуя изменений в 32-битных двоичных файлах. Однако при выполнении некоторых задач вы можете увидеть доказательства этого перенаправления. Например, если ввести сценарий командной строки в 64-битной командной строке, команда может не получить доступ к 32-битным программам в папке «Файлы программ». Подсистема WOW64 перенаправляет и устанавливает 32-битные программы в папке Program Files (x86). Чтобы получить доступ к правильной папке, необходимо изменить сценарий командной строки. Кроме того, необходимо ввести скрипт командной строки в 32-битной командной строке. 32-битная командная подсказка автоматически перенаправляет вызовы файловой системы в правильный 32-битный каталог.

Чтобы запустить 32-битную командную подсказку, выполните следующие действия:

Проверка версии

Некоторые 32-битные программы изучают сведения о версии операционной системы. Многие 32-битные программы, которые выполняют эту проверку, не распознают x64-версии Windows как совместимые операционные системы. При таком поведении 32-битная программа создает ошибку проверки версии, а затем закрывается. Если такое поведение происходит, обратитесь к производителю 32-битной программы для обновления, совместимого с x64-версиями Windows.

OpenGL

X64-версии Windows не включают драйвер графики OpenGL. Обратитесь к производителю устройства для драйвера, который совместим с x64-версиями Windows.

Консоль управления Майкрософт (MMC)

В x64-версиях Windows 64-битная версия консоли управления Microsoft (MMC) для запуска различных оснастки. Однако иногда может потребоваться, чтобы 32-битная версия MMC запускала оснастку в подсистеме WOW64. Дополнительные сведения о поведении MMC в x64-версиях Windows см. в статье «Запуск 32-битных и 64-битных 64-битных 64-битных 64-битных 64-битных Windows» в разделе Использование MMC 2.0 документации microsoft Platform SDK. Чтобы просмотреть этот документ, посетите следующий веб-сайт Microsoft: запуск 32-битных и 64-битных 64-битных 64-битных 64-битных Windows

x64 Considerations

X64-версии Windows поддерживают 32-битные инструкции и 64-битные инструкции. Подсистема WOW64 может запускать 32-битные программы в родном 64-битном режиме, переключая родной режим процессора. Отдельные уровни оборудования или программного обеспечения не требуются. При запуске 32-битной программы на основе x64 версий Windows вы можете не испытывать снижения производительности.

Дополнительные сведения о производительности процессора на основе x64 обратитесь к производителю процессора или посетите веб-сайт производителя. Сведения и решение, представленные в этом документе, представляют текущее представление корпорации Майкрософт по этим вопросам на дату публикации. Это решение доступно через Корпорацию Майкрософт или сторонний поставщик. Корпорация Майкрософт специально не рекомендует сторонних поставщиков или сторонних решений, которые могут быть описаны в этой статье. В этой статье также могут быть другие сторонние поставщики или сторонние решения. Поскольку Корпорация Майкрософт должна реагировать на изменение условий на рынке, эта информация не должна быть интерпретируется как обязательство корпорации Майкрософт. Корпорация Майкрософт не может гарантировать или одобрять точность любой информации или любого решения, представленного Корпорацией Майкрософт или любым упомянутым сторонним поставщиком.

Корпорация Майкрософт не делает никаких гарантий и исключает все представления, гарантии и условия, будь то экспресс, подразумеваемые или нормативные. К ним относятся, но не ограничиваются представлениями, гарантиями или условиями названия, неущемления, удовлетворительного состояния, торговой доступности и пригодности для определенной цели, в отношении любых служб, решений, продуктов или любых других материалов или сведений. В любом случае Корпорация Майкрософт не несет ответственности за любое стороне решение, которое упоминается в этой статье.

Ссылки

Дополнительные сведения об процессоре AMD64 можно получить на следующем веб-сайте Advanced Micro Devices: ВЕБ-сайт AMD
Контактные данные сторонних организаций предоставлены в этой статье с целью помочь пользователям получить необходимую техническую поддержку. Эти данные могут быть изменены без предварительного уведомления. Корпорация Майкрософт не дает гарантий относительно правильности приведенных контактных данных сторонних производителей.

Дополнительные сведения о разработке программ для версий Windows Server 2003 и Windows XP можно найти на следующем веб-сайте Microsoft: Введение в разработку приложений для 64-битной версии Windows

В этой статье упомянуты программные продукты независимых производителей. Корпорация Майкрософт не дает никаких явных, подразумеваемых и прочих гарантий относительно производительности или надежности этих продуктов.

Источник

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

Аннотация

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

Введение

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

1. Шаг первый. 64-битность бывает разной.

Давайте разберемся

В рамках архитектуры вычислительной техники под термином «64-битный» понимают 64-битные целые и другие типы данных, имеющих размер 64 бита. Под «64-битными» системами могут пониматься 64-битные архитектуры микропроцессоров (например, EM64T, IA-64) или 64-битные операционные системы (например, Windows XP Professional x64 Edition) [1].
AMD64 (она же x86-64, Intel 64, EM64T, x64) — 64-битная архитектура микропроцессора и соответствующий набор инструкций, разработанные компанией AMD [2]. Этот набор инструкций был лицензирован компанией Intel под названием EM64T (Intel64). Архитектура AMD64 представляет собой расширение архитектуры x86 с полной обратной совместимостью. Архитектура получила широкое распространение в качестве базы персональных компьютеров и рабочих станций.
IA-64 — 64-битная микропроцессорная архитектура, разработанная совместно компаниями Intel и Hewlett Packard [3]. Реализована в микропроцессорах Itanium и Itanium 2 [4]. Архитектура используется в основном в многопроцессорных серверах и кластерных системах.
AMD64 и IA-64 это две различные 64-битные архитектуры не совместимые между собой. Поэтому разработчикам следует сразу решить, необходимо ли поддерживать обе эти архитектуры или только одну. В большинстве случаев, если вы не разрабатываете узкоспециализированное программное обеспечение для кластерных систем или не реализуете свою высокопроизводительную СУБД, то с большой вероятностью вам необходимо реализовать поддержку только архитектуры AMD64, которая получила значительно большее распространение, чем IA-64. Особенно это относится к программному обеспечению для рынка персональных компьютеров, который почти на 100 процентов занят архитектурой AMD64.
Далее в статье мы будем говорить только об архитектуре AMD64 (EM64T, x64), так как ее использование сейчас наиболее актуально для разработчиков прикладного программного обеспечения.
Говоря о различных архитектурах, следует упомянуть о понятии «Модель данных». Под моделью данных следует понимать соотношения размерностей типов, принятых в рамках среды разработки. Для одной операционной системы могут существовать несколько средств разработки, придерживающихся разных моделей данных. Но обычно преобладает только одна модель, наиболее соответствующая аппаратной и программной среде. Примером может служить 64-битная операционная система Windows, в которой родной моделью данных является LLP64. Но для совместимости 64-битная система Windows поддерживает исполнение 32-битных программ, которые работают в режиме модели данных ILP32LL. В таблице N1 приведены сведения об основных моделях данных.

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

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

2. Шаг второй. Выясните, нужен ли вам 64-битный вариант вашего продукта

Начать освоение 64-битных систем следует с вопроса «А нужно ли нам пересобрать свой проект для 64-битной системы?». На этот вопрос надо обязательно дать ответ, но не торопясь, подумав. С одной стороны можно отстать от своих конкурентов, вовремя не предложив 64-битные решения. С другой — можно впустую потратить время на 64-битное приложение, которое не даст никаких конкурентных преимуществ.
Перечислим основные факторы, которые помогут сделать вам выбор.

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

Не следует создавать 64-битную версию приложения с коротким жизненным циклом. Благодаря подсистеме WOW64 старые 32-битные приложения достаточно хорошо работают на 64-битных Windows системах и поэтому делать программу 64-битной, которая через 2 года перестанет поддерживаться, смысла не имеет [6]. Более того, практика показала, что переход на 64-битные версии Windows затянулся и возможно большинство ваших пользователей в краткосрочной перспективе будут использовать только 32-битный вариант вашего программного решения.
Если планируется длительное развитие и длительная поддержка программного продукта, то следует начинать работать над 64-битным вариантом вашего решения. Это можно делать неспешно, но учтите, что чем дольше у вас не будет полноценного 64-битного варианта, тем больше сложностей может возникать с поддержкой такого приложения, устанавливаемого на 64-битные версии Windows.

2.2. Ресурсоемкость приложения

Перекомпиляция программы для 64-битной системы позволит ей использовать огромные объемы оперативной памяти, а также убыстрит скорость ее работы на 5-15%. Убыстрение на 5-10% произойдет за счет использования архитектурных возможностей 64-битного процессора, например большего количества регистров. Еще 1%-5% прироста скорости обуславливается отсутствием прослойки WOW64, которая транслирует вызовы API между 32-битными приложениями и 64-битной операционной системой.
Если ваша программа не работает с большими объемами данных (более 2GB) и скорость ее работы не критична, то переход на 64-битную в ближайшее время систему не столь актуален.
Кстати, даже простые 32-битные приложения, могут получить преимущество от их запуска в 64-битной среде. Вы, наверное, знаете, что программа собранная с ключом /LARGEADDRESSAWARE:YES может выделять до 3-х гигабайт памяти, если 32-битная операционная система Windows запущена с ключом /3gb. Эта же 32-битная программа, запущенная на 64-битной системе может выделить почти 4 GB памяти (на практике около 3.5 GB).

2.3. Разработка библиотек

Если вы разрабатываете библиотеки, компоненты или иные элементы, с помощью которых сторонние разработчики создают свое программное обеспечение, то вы должны проявить оперативность в создании 64-битного варианта своей продукции. В противном случае, ваши клиенты, заинтересованные в выпуске 64-битных версий, будут вынуждены искать альтернативные решения. Например, некоторые разработчики программно-аппаратной защиты откликнулись с большой задержкой на появление 64-битных программ, что заставило ряд клиентов искать другие инструменты для защиты своих программ.
Дополнительным преимуществом от выпуска 64-битной версии библиотеки является то, что вы можете продавать ее как отдельный продукт. Таким образом, ваши клиенты, желающие создавать как 32-битные, так и 64-битные приложения будут вынуждены приобретать 2 различные лицензии. Например, такая политика используется компанией Spatial Corporation при продаже библиотеки Spatial ACIS.

2.4. Зависимость вашего продукта от сторонних библиотек

Прежде чем планировать работу над созданием 64-битной версий вашего продукта выясните, имеются ли 64-битные варианты библиотек и компонентов, которые в нем используются. Также узнайте, какова ценовая политика по отношению к 64-битному варианту библиотеки. Все это можно выяснить, посетив сайт разработчика библиотеки. Если поддержка отсутствует, то заранее поищите альтернативные решения, поддерживающие 64-битные системы.

2.5. Наличие 16-битных приложений

Если в ваших решениях все еще присутствуют 16-битные модули, то пора от них избавиться. Работа 16-битных приложений в 64-битных версиях Windows не поддерживается.
Здесь следует пояснить один момент, связанный с использованием 16-битных инсталляторов. Они до сих пор используются для установки некоторых 32-битных приложений. Создан специальный механизм, который на лету подменяет ряд наиболее популярных 16-битных инсталляторов на более новые версии. Это может вызвать неверное мнение, что 16-битные программы по-прежнему работают в 64-битной среде. Помните, это не так.

2.6. Наличие кода на ассемблере

Не забывайте, что использование большого объема кода на ассемблере, может существенно повысить стоимость создания 64-битной версии приложения.
Взвесив все перечисленные факты, все за и против, примите решение, следует ли вам переносить ваш проект на 64-битные системы. И если это так, то давайте пойдем дальше.

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

Если вы приняли решение о разработке 64-битной версии вашего продукта и готовы потратить на это время, это еще не гарантирует успех. Дело в том, что вы должны обладать всем необходимым инструментарием и здесь могут быть неприятные казусы.
Самой простой, но и самой непреодолимой, может стать проблема отсутствия 64-битного компилятора. Статья пишется в 2009 году, но все еще нет 64-битного компилятора C++ Builder от Codegear [7]. Его выпуск ожидается только к концу этого года. Невозможно обойти подобную проблему, если конечно но переписать весь проект, например, с использованием Visual Studio. Но если с отсутствием 64-битного компилятора все понятно, то другие аналогичные проблемы могут оказаться более скрытными и вылезти уже на этапе работ по переносу проекта на новую архитектуру. Поэтому, хочется посоветовать заранее провести исследование, существуют ли все необходимые компоненты, которые потребуются для реализации 64-битной версии вашего продукта. Вас могут поджидать неприятные сюрпризы.
Конечно, перечислить все, что может понадобиться для проекта здесь невозможно, но все-таки предложу список, который поможет вам соорентироваться и возможно вспомнить о других моментах, которые необходимы для реализации вашего 64-битного проекта:

3.1. Наличие 64-битного компилятора

Сложно что-то еще сказать о важности наличия 64-битного компилятора. Он просто должен быть.
Если вы планируете разрабатывать 64-битные приложения с использованием последней версии (на момент написания статьи) Visual Studio 2008, то следующая таблица N2 поможет помочь определить, какая из редакций Visual Studio вам необходима.

Таблица N2. Возможности различных редакций Visual Studio 2008

3.2. Наличие 64-битных компьютеров под управлением 64-битных операционных систем

Можно конечно использовать виртуальные машины для запуска 64-битных приложений на 32-битной технике, но это крайне неудобно и не обеспечит необходимого уровня тестовых испытаний. Желательно, чтобы в машинах было установлено не менее 4-8 гигабайт оперативной памяти.

3.3. Наличие 64-битных вариантов всех используемых библиотек

Если библиотеки представлены в исходных кодах, то должна присутствовать 64-битная конфигурация проекта. Самостоятельно заниматься модернизацией библиотеки для ее сборки под 64-битную систему может быть неблагодарным и сложным занятием, а результат может оказаться ненадежным и содержащим ошибки. Также вы можете нарушить этим лицензионные соглашения. Если вы используете библиотеки в виде бинарных модулей, то вы также должны узнать, существуют ли 64-битные модули. Вы не сможете использовать 32-битные DLL внутри 64-битного приложения. Можно создать специальную обвязку через COM, но эта будет отдельной большой, сложной задачей [8]. Также учтите, что приобретение 64-битной версии библиотеки может стоить дополнительных денег.

3.4. Отсутствие встроенного кода на ассемблере

Visual C++ не поддерживает 64-битный встроенный ассемблер. Вы должны использовать или внешний 64-битный ассемблер (например, MASM) или иметь реализацию той же функциональности на языке Си/Си++ [9].

3.5. Модернизация методологии тестирования

Существенная переработка методологии тестирования, модернизация юнит-тестов, использование новых инструментальных средств. Более подробно об этом будет сказано ниже, но не забывайте учесть это на этапе оценки временных затрат на миграцию приложения на новую систему [10].

3.6. Новые данные для тестирования

Если вы разрабатываете ресурсоемкие приложения, потребляющие большой объем оперативной памяти, то вам необходимо позаботиться о пополнении базы тестовых входных данных. При нагрузочном тестировании 64-битных приложений желательно выходить за пределы 4 гигабайт потребляемой памяти. Многие ошибки могут проявиться только при таких условиях.

3.7. Наличие 64-битных систем защиты

Используемая система защиты, должна поддерживать 64-битные системы в полном необходимом вам объеме. Например, компания Aladdin достаточно быстро выпустила 64-битные драйвера для поддержки аппаратных ключей Hasp. Но очень долго отсутсвовала система автоматической защиты 64-битных бинарных файлов (программа Hasp Envelop). Таким образом, механизм защиты приходилось реализовывать самостоятельно внутри программного кода, что являлось дополнительной сложной задачей, требующей квалификации и времени. Не забывайте про подобные моменты, связанные с обеспечением защиты, системой обновлений и так далее.

3.8. Инсталлятор

Необходимо наличие нового инсталлятора, способного полноценно устанавливать 64-битные приложения. Хочется здесь сразу предостеречь об одной традиционной ошибке. Это создание 64-битных инсталляторов для установки 32/64-битных программных продуктов. Подготавливая 64-битую версию приложения, разработчики часто хотят довести «64-битность» в нем до абсолюта. И создают 64-битный инсталлятор, забывая о том, что у пользователей 32-битной операционной системы такой инсталляционный пакет просто не запустится. Обратим внимание, что не запустится не 32-битное приложение включенное в дистрибутив наряду с 64-битным, а именно сам установщик. Ведь если дистрибутив представляет собой 64-битное приложение, то на 32-битной операционной системе он, конечно же, не запустится. Самое обидное в этом то, что пользователь никак не сможет догадаться, что же происходит. Он просто увидит инсталляционный пакет, который невозможно запустить.

4. Шаг четвертый. Настройка проекта в Visual Studio 2005/2008

Создание 64-битной конфигурации проекта в Visual Studio 2005/2008 выглядит достаточно просто. Сложности будут подстерегать вас на этапе сборки новой конфигурации и поиска в ней ошибок. Для создания же 64-битной конфигурации достаточно выполнить следующие 4 шага:
Запускаем менеджер конфигураций, как показано на рисунке N1:

Рисунок 1. Запуск менеджера конфигураций

В менеджере конфигураций выбираем поддержку новой платформе (рисунок N2):

Рисунок 2. Создание новой конфигурации

Выбираем 64-битную платформу (x64), а в качестве основы выбираем настройки от 32-битной версии (рисунок N3). Те настройки, которые влияют на режим сборки среда Visual Studio скорректирует сама.

Рисунок 3. Выбираем x64 в качестве платформы и берем за основу конфигурацию Win32

Добавление новой конфигурации завершено, и мы можем выбрать 64-битный вариант конфигурации и приступить к компиляции 64-битного приложения. Выбор 64-битной конфигурации для сборки показан на рисунке N4.

Рисунок 4. Теперь доступна 32-битная и 64-битная конфигурация

Если вам повезет, то дополнительно заниматься настройкой 64-битного проекта необходимости не будет. Но это сильно зависит от проекта, его сложности и количества используемых библиотек. Единственное, что стоит сразу изменить, это размер стека. В случае если в вашем проекте используется стек размером по умолчанию, то есть в 1 мегабайт, то есть смысл задать его размером в 2 мегабайта для 64-битной версии. Это не обязательно, но лучше заранее подстраховаться. Если у вас используется размер стека, отличный от размера по умолчанию, то есть смысл сделать его для 64-битной версии в 2 раза больше. Для этого в настройках проекта найдите и измените параметры Stack Reserve Size и Stack Commit Size.

5. Шаг пятый. Компиляция приложения

Здесь было бы хорошо рассказать о типичных проблемах, возникающих на этапе компиляции 64-битной конфигурации. Рассмотреть, какие проблемы возникают со сторонними библиотеками, рассказать, что компилятор в коде связанного с функциями WInAPI более не допустит помещения указателя в тип LONG и вам будет необходимо модернизировать свой код и использовать тип LONG_PTG. И многое, многое другое. К сожалению этого так много и ошибки так разнообразны, что нет возможности изложить это в рамках одной статьи и даже, пожалуй, книги. Вам придется самим просмотреть все ошибки, которые выдаст компилятор и новые предупреждения, которых ранее не было и в каждом отдельно случае разобраться, как модернизировать код.
Частично облегчить жизнь может коллекция ссылок на ресурсы, посвященные разработке 64-битных приложений: http://www.viva64.com/links/64-bit-development/. Коллекция постоянно пополняется и автор будет благодарен читателям, если они пришлют ему ссылки на ресурсы, которые, по их мнению, заслуживают внимания.
Остановимся здесь только на типах, которые могут представлять интерес для разработчиков при миграции приложений. Эти типы представлены в Таблице N3. Большинство ошибок при компиляции будет связано с использование именно этих типов.

Тип Размерностьтипа наплатформеx32 / x64 Примечание
int 32 / 32 Базовый тип. На 64-битных системах остался 32-битным.
long 32 / 32 Базовый тип. На 64-битных Windows системах остался 32-битным. Учтите, что в 64-битных Linux системах этот тип был расширен до 64-бит. Не забывайте об этом если разрабатываете код, который должен работать компилироваться для Windows и для Linux систем.
size_t 32 / 64 Базовый беззнаковый тип. Размер типа выбирается таким образом, чтобы в него можно было записать максимальный размер теоретически возможного массива. В тип size_t может быть безопасно помещен указатель (исключение составляют указатели на функции классов, но это особенный случай).
ptrdiff_t 32 / 64 Аналогичен типу size_t, но является знаковым. Результат выражения, где один указатель вычитается из другого (ptr1-ptr2), как раз будет иметь тип ptrdiff_t.
Указатель 32 / 64 Размер указателя напрямую зависит от разрядности платформы. Будьте аккуратны при приведении укзателей к другим типам.
__int64 64 / 64 Знаковый 64-битный тип.
DWORD 32 / 32 32-битный беззнаковый тип. Объявлен в WinDef.h как:typedef unsigned long DWORD;
DWORDLONG 64 / 64 64-битный беззнаковый тип. Объявлен в WinNT.h как:typedef ULONGLONG DWORDLONG;
DWORD_PTR 32 / 64 Беззнаковый тип, в который можно помещать указатель. Объявлен в BaseTsd.h как:typedef ULONG_PTR DWORD_PTR;
DWORD32 32 / 32 32-битный беззнаковый тип. Объявлен в BaseTsd.h как:typedef unsigned int DWORD32;
DWORD64 64 / 64 64-битный беззнаковый тип. Объявлен в BaseTsd.h как:typedef unsigned __int64 DWORD64;
HALF_PTR 16 / 32 Половина указателя. Объявлен в Basetsd.h как:#ifdef _WIN64 typedef int HALF_PTR;#else typedef short HALF_PTR;#endif
INT_PTR 32 / 64 Знаковый тип, в который можно помещать указатель. Объявлен в BaseTsd.h как:#if defined(_WIN64) typedef __int64 INT_PTR; #else typedef int INT_PTR;#endif
LONG 32 / 32 Знаковый тип, который остался 32-битным. Поэтому во многих случаях теперь следует использовать LONG_PTR. Объявлен в WinNT.h как:typedef long LONG;
LONG_PTR 32 / 64 Знаковый тип, в который можно помещать указатель. Объявлен в BaseTsd.h как:#if defined(_WIN64) typedef __int64 LONG_PTR; #else typedef long LONG_PTR;#endif
LPARAM 32 / 64 Параметр для посылки сообщений. Объявлен в WinNT.h как:typedef LONG_PTR LPARAM;
SIZE_T 32 / 64 Аналог типа size_t. Объявлен в BaseTsd.h как:typedef ULONG_PTR SIZE_T;
SSIZE_T 32 / 64 Аналог типа ptrdiff_t. Объявлен в BaseTsd.h как:typedef LONG_PTR SSIZE_T;
ULONG_PTR 32 / 64 Беззнаковый тип, в который можно помещать указатель. Объявлен в BaseTsd.h как:#if defined(_WIN64) typedef unsigned __int64 ULONG_PTR;#else typedef unsigned long ULONG_PTR;#endif
WORD 16 / 16 Беззнаковый 16-битный тип. Объявлен в WinDef.h как:typedef unsigned short WORD;
WPARAM 32 / 64 Параметр для посылки сообщений. Объявлен в WinDef.h как:typedef UINT_PTR WPARAM;

Таблица N3. Типы представляющие интерес при переносе 32-битных программ на 64-битые Windows системы.

6. Диагностика скрытых ошибок

Если вы думаете, что после исправления всех ошибок компиляции будет получено долгожданное 64-битное приложение, то придется вас разочаровать. Самое сложное впереди. На этапе компиляции вами будут исправлены самые явные ошибки, которые смог обнаружить компилятор, которые в основном связаны с невозможностью неявного приведения типов. Но это верхушка айсберга. Основная часть ошибок скрыта. Эти ошибки с точки зрения абстрактного языка Си++ смотрятся безопасно или замаскированы явными приведениями типов. Таких ошибок в несколько раз больше, чем количество ошибок выявленных на этапе компиляции.
На ключ /Wp64 надежды возлагать не следует. Это ключ часто преподносится как чудесное средство поиска 64-битных ошибок. В действительности ключ /Wp64 всего лишь дает возможность при компиляции 32-битного кода получить некоторые предупреждения, что в 64-битном режиме определенные участки кода будут некорректны. При компиляции 64-битного кода эти предупреждения будут выданы компилятором в любом случае. И поэтому при компиляции 64-битного приложения ключ /Wp64 игнорируется. И уж тем более этот ключ не поможет в поиске скрытых ошибок [11].
Рассмотрим несколько примеров скрытых ошибок.

6.1. Явное приведение типов

Самый простой, но вовсе не самый легкий для обнаружения класс ошибок связан с явным приведением типов, при которых происходит обрезание значащих бит.
Распространенным пример — приведение указателей к 32-битным типам при передачи их в функции, такие как SendMessage:

Здесь явное приведение типа используется для превращения указателя в числовой тип. Для 32-битной архитектуры приведенный пример корректен, так как последний параметр функции SendMessage имеет тип LPARAM, который на 32-битной архитектуре совпадает с DWORD. Для 64-битной архитектуре использование DWORD ошибочно и должно быть заменено на LPARAM. Тип LPARAM имеет в зависимости от архитектуры размер 32 или 64 бита.
Это простой случай, но часто приведение типа выглядит более изысканно и обнаружить его используя предупреждения компилятора или поиском по тексту программы невозможно. Явные приведения типов подавляют диагностику компилятора, поскольку они именно и предназначены, чтобы сказать компилятору что приведение типов корректно и программист взял на себя ответственность за безопасность кода. Явный поиск тоже не поможет. Типы могут быть не стандартные имена (заданные программистом через typedef), а способов осуществить явное приведение типов тоже не мало. Для надежной диагностики подобных ошибок необходимо использовать только специальный инструментарий, такой как анализаторы Viva64 или PC-Lint.

6.2. Неявное приведение типов

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

Функция __fread возвращает тип size_t, но для хранения количества прочитанных байт используется тип int. В результате при больших объемах читаемых данных функция может вернуть не то количество байт, которое на самом деле будет прочитано.
Вы можете сказать, что это безграмотный код начинающих, что о таком приведении типа сообщит компилятор и что вообще такой код легко найти и поправить. Это теоретически. А практически в реальной жизни с большими проектами все может обстоять иначе. Этот пример взят из исходного кода FreeBSD. Ошибка была поправлена только в декабре 2008 года! Это притом, что первая (экспериментальная) 64-битная версия FreeBSD вышла еще в июне 2003 года.
Вот исходный код до исправления:
http://www.freebsd.org/cgi/cvsweb.cgi/src/lib/libc/stdio/fread.c?rev=1.14
А вот исправленный вариант (декабрь 2008) года:
http://www.freebsd.org/cgi/cvsweb.cgi/src/lib/libc/stdio/fread.c?rev=1.15

6.3. Работа с битами, сдвиги

Легко сделать ошибку в коде работящем с отдельными битами. Следующий тип ошибки связан с операциями сдвига. Рассмотрим пример:

Приведенный код работоспособен на 32-битной архитектуре и позволяет выставлять бит с номерами от 0 до 31 в единицу. После переноса программы на 64-битную платформу возникнет необходимость выставлять биты от 0 до 63. Но данный код никогда не выставит биты, с номерами 32-63. Обратите внимание, что «1» имеет тип int и при сдвиге на 32 позиции произойдет переполнение, как показано на рисунке 5. Получим мы в результате 0 (рисунок 5-B) или 1 (рисунок 5-C) зависит от реализации компилятора.

Рисунок 5. A — Корректная установка 31-ого бита в 32-битном коде; B,C — Ошибка установки 32-ого бита на 64-битной системе (два варианта поведения)

Для исправления кода необходимо сделать константу «1» того же типа, что и переменная mask:

Заметим также, что неисправленный код приведет еще к одной интересной ошибке. При выставлении 31 бита на 64-битной системе результатом работы функции будет значение 0xffffffff80000000 (см. рисунок 6). Результатом выражения 1

Источник

Понравилась статья? Поделиться с друзьями:

Не пропустите наши новые статьи:

  • можно ли устанавливать программы на флешку
  • можно ли устанавливать пиратские программы на лицензионную windows 10
  • можно ли устанавливать обновления windows 10 на пиратке
  • можно ли устанавливать на макбук нелицензионные программы
  • можно ли устанавливать игры на линукс

  • Операционные системы и программное обеспечение
    0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest
    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии