Как настроить игру на 32 битную систему. Другие виртуальные машины

Все современные видеоигры разрабатываются исключительно под 64-битные процессоры. Игры же на 32 битную операционную систему в последние годы практически не делаются. Почему?

Давайте разберёмся с этим вопросом, а также составим топ компьютерных развлечений прошлых лет, в которые можно поиграть на Windows x86.

В чём разница?

Большинству пользователей известно, что 32-битные приложения на 64-разрядной системе запустить можно, а вот наоборот почему-то нет. Ответ на вопрос довольно простой.

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

Во-первых, производительность выше, во-вторых, поддерживает в разы больший объем оперативной памяти.

Если в x 86 адресного пространства хватает для адресации только 2 32 байта оперативной памяти, то Windows 64 bit способна работать с максимальным объемом ОЗУ, ограниченным 2 64 байт. Насколько это большая разница, можно прикинуть на калькуляторе. Так что при наличии 4 и более ГБ оперативной памяти определит только в ~3,25 ГБ ОЗУ, остальная память (750 мегабайт её остаётся, 4.75 ГБ или больше) попросту не будет использоваться

Да, адаптация игр под Windows низшей разрядности дело трудоёмкое и затратное, а ещё в такой системе приложение получит не более 2 гигабайт оперативной памяти (остальная расходуется для работы сторонних программ, файлов, служб, драйверов и прочих компонентов ОС).

Игры приведены в алфавитном порядке. Без каких-либо рейтингов и оценок.

BioShock Infinite

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

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

Контроль над полётом утрачен, и главного героя отправляют в эту богадельню отыскать и спасти владеющую сверхспособностями девушку.

На выполнение миссии есть несколько часов, по истечении которых город окажется на земле или в океане.

Открытый игровой мир порадует геймеров. Здесь больше нет тесных подводных улиц, а перемещение возможно и по воздуху, что увеличивает игровое пространство на порядки. Пара пушек с ограниченным боезапасом, аптечки, еда и плазмиды – весь арсенал героя.

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

Плазмиды отошли в сторону: пара выстрелов гораздо эффективнее действуют на противника, чем поджог или натравливание роя пчёл.

Borderlands 2

Столь ожидаемое продолжение с нарисованным миром, совершенной системой модификации оружия, массой DLC и развитой ролевой составляющей.

Красавчик Джек захватил власть на планете. Когда он узнал, что конкуренты ищут Хранилище , сделал так, дабы они попали в аварию посреди льдов Пандоры.

Увы, умные роботы спасли всех четверых врагов Джека.

Четверка выживших объединяется с бродягами, одиночками, бандитами и прочими жителями планеты, кто не желает работать на корпорацию Джека.

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

Кто одержит победу: загнанные в угол отчаянные люди или деньги и власть?

Ролевая система Borderlands 2 претерпела мало изменений. Опыт так же начисляется за выполненные задания и убийства.

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

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

Call of Duty Modern Warfare 3

Восьмая часть из серии шутеров от Infinity Ward и партнёров. Герой в заключительной части о Третьей Мировой является бойцом спецподразделений различных стран.

Арсенал игры очень разнообразен, здесь собраны стволы из разных уголков планеты.

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

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

Мультиплеер мало изменился: уменьшены карты, награды разделены на 3 группы, а выдаются они только за очки. Режим «Спецоперации» состоит из последовательности миссий для совместного прохождения, в режим «Выживания» заключается в необходимости объединиться и удерживать позицию, отбиваясь от волн противников, как в защите башен.

Dead Space 2

Айзек Кларк больше не бегает по кораблю, затерянному в мёртвом космосе. Он хоть часто с гадами встречается, но и людей нередко видит.

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

Именно они держали Айзека в стазис-сне все три года.

Геймплей позволяет частично разрушать предметы и взаимодействовать с ними (перемещать, бить стёкла для разгерметизации).

Наличие реактивных двигателей в костюме позволяет летать в безгравитационных зонах.

Кинезис даёт возможность отрывать конечности у врагов и бросать в противников валяющиеся повсюду обрезки арматуры.

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

Fallout 3

Два столетия стены убежища были родными для его обитателей после ядерной войны конца XX века. Главный герой, достигнувший совершеннолетия, вынужден покинуть убежище и отыскать отца.

Он почему-то ушел отсюда без предупреждения.

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

Система прицеливания в Fallout 3 вышла на новый уровень: ставим бой на паузу, выбираем часть тела, куда нужно послать пулю, и продолжаем геймплей.

Попав в руку или ногу, противник останется без нее, так можно и голову снести и пушку выбить. То же умеют и враги делать: раненая нога замедлит шаг, а выстрел в руку снизит точность стрельбы.

В зависимости от поступков протагониста, он заработает себе карму на просторах Пустоши, что отразится на внешнем виде и отношении к герою окружающих.

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

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

Mass Effect 3

Последний шутер, который попал в лучшие игры для 32 разрядной системы. Это игра с развитой ролевой системой о последнем подвиге Шепарда и его «Нормандии».

Пока капитан был в заточении, синтетическая раса опять начала свирепствовать, поэтому Суд Альянса решил освободить Шепарда и его команду.

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

Для этого придётся принимать участие в решении многовековых споров, стать врагом для друзей и даже с Катализатором побеседовать.

Прокачка героя осуществляется путём набора очков опыта или считывания данных с терминалов.

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

Прежний поиск ресурсов исчез, зато охота за артефактами стала более масштабной , несмотря на то, что необходимо объединить все расы и совместными усилиями дать отпор синтетическим захватчикам. Чем больше на финальную битву будет собрано рас и ресурсов, тем выше шанс на успех. От готовности к схватке зависит и финал последней части Mass Effect с Шепардом в главной роли.

Mirror’s Edge

Не все игры на 32 битную систему будут о стрельбе. Найдётся место и платформеру.

Всё в мире находится под контролем государств. Информация без надзора в черте города может быть передана только с уст в уста или через раннеров.

Таковым является главная героиня приключений с паркурными элементами в основе. Её имя Фэйт.

Геймплей игры основывается на постоянном продвижении протагониста, владеющего искусством фри рана, по крышам, зданиям, трубам, лестницам и т. д. Почти все они созданы из стекла, блестящего ярко выкрашенного мрамора и пластика.

Встречаются девушке и копы с пушками, но ни одни, ни вторые её не интересуют: хук слева или подсечка и противник в нокдауне, а бег продолжается.

Для преодоления препятствий доступны развороты, приседания, ползки, прыжки с разгона, бег по отвесным стенам, скольжение по верёвкам и, пожалуй, это всё.

Однако, умелая и своевременная комбинация приемов даст неимоверные результаты.

За незначительные просчёты придётся платить потраченными нервами: не хватило силы допрыгнуть – Фэйт еле-еле хватается за лестницу и медленно залазит на неё, а противник догоняет.

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

Ведьмак 2 Убийца Королей

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

Как-то беловолосый ведьмак Геральт волей судьбы попал в покои короля в момент осады замка. Страшная картина его застала: ассассин перерезал монарху горло и скрылся.

Ведьмак стал первым подозреваемым. Учитывая его прежние заслуги, Геральту дают возможность найти реального убийцу.

Погоня за тем, кто подставил беловолосого, - основа сюжета, но без отвлечения от истории для убийства монстров, снятия порчи и поиска исчезнувшего торговца никак.

Лишь на лёгком уровне здесь играется просто. Уже средняя сложность заставляет изучать алхимическое искусство, варить эликсиры, вытяжки и масла.

Разнообразить сюжет поможет знакомая доска объявлений, где всегда есть что-то интересное.

Каждый квест лучше выполнять, достигнув определённого уровня, иначе противник окажется намного сильнее, и серебряный меч с маслом не всегда помогут.

Отказываться от типичных для серии матов, сексуальных сцен, нецензурной брани и высказывания мыслей вслух разработчики не решились.

Есть же отличные игры, которые можно запустить на 32 битной Windows?

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

Для пользователей 32-битной ОС иногда возникает необходимость использовать программные средства, предназначенные только для 64-битной ОС. Что же делать, если пользователь не готов отказаться от 32-битной ОС как основной рабочей системы?

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

В Mac OS X ядро является гибридным. Оно позволяет одинаково работать любым приложениям в независимости от того, являются ли они 32- или 64-битными. Единственное отличие гибридного ядра от полноценного 64-разрядного - это невозможность использовать в системе больше 32 ГБ оперативной памяти. Поэтому на данный момент нет совершенно никакой разницы между загрузкой в 32- и 64-битном режимах. А вот в будущем разница обязательно появится по мере увеличения объемов использования ОЗУ и появления новых технологий.

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

Виртуализация

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

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

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

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

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

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

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

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

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

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

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

Примечание : Первая попытка внедрить 64-разрядные системы была достаточно провальной. Жесткие ограничения и отсутствие реальных преимуществ давало о себе знать. На тот момент, даже драйвера под 64-разрядные системы было достаточно сложно найти. Не говоря уже о программах, на которых хоть как-либо была бы заметна разница. Снятие ограничения на 3Гб оперативной памяти, безусловно, сегодня сильное преимущество, но на тот момент это больше напоминало красивый слоган.

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

Windows 32 на Windows 64 (WOW64)

WOW64 эмулирует 32-битную Windows

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

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

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

Тот факт, что WOW64, как и 32-битное приложение, выполняется в режиме пользователя, объясняет причину отсутствия поддержки 32-битных драйверов. Если говорить другими словами, то, для корректного запуска, драйверам требуется режим ядра, который не может обеспечить WOW64. Поэтому, если у вас 64-разрядная Windows, то все драйвера должны быть 64-битными.

Эмулятор WOW64 состоит из следующих 64-разрядных библиотек:

Примечание : Это единственные 64-разрядные библиотеки, которые загружаются в 32-разрядный процесс.

  • Wow64.dll - ядро инфраструктуры системы эмуляции. Линкует вызовы в точки входа Ntoskrnl.exe
  • Wow64Win.dll - линкует вызовы в точки входа Win32k.sys
  • Wow64Cpu.dll - переключает процессор между 32-битным и 64-битным режимом
  • Ntdll.dll - 64-битная версия Wow64.

Wow64.dll загружает 32-битную версию (x86) Ntdll.dll и все необходимые 32-битные библиотеки, которые в основном остались без изменений. Однако, некоторые их этих 32-разрядных библиотек все же были изменены, чтобы корректно исполняться в WOW64. Как правило, такие изменения были сделаны из-за того, что они используют оперативную память вместе 64-разрядными компонентами системы

Управление файлами и настройками реестра в WOW64

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

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

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

Файлы 32-разрядных приложений, по умолчанию, устанавливаются в:

  • C:\Program Files(x86)

32-разрядные системные файлы устанавливаются в:

  • C:\WINDOWS\SysWOW64

Для 64-разрядных приложений, файлы устанавливаются в:

  • C:\Program Files
  • C:\WINDOWS\SYSTEM32

Механизм перенаправления WOW64 гарантирует, что запросы от 32-разрядных приложений к каталогам "C:\Program Files" и "C:\WINDOWS\SYSTEM32" будут перенаправлены на соответствующие каталоги для 32-битных версий.

Однако, существует одна проблема с перенаправлением файлов. Пользователи и разработчики должны быть в курсе этой особенности.

Многие 64-разрядные приложения все еще используют 32-битный режим и процедуры. И не учитывают это при создании инсталлятора . Для того, чтобы приложение было установлено правильно. т.е. в "C:\Program Files", программа установки должна сделать системный вызов к операционной системе, чтоб система приостановила механизм перенаправления файлов Wow64. А после установки сделать другой системный вызов, чтобы снова включить перенаправление. Если производить установку без остановки перенаправления, то программа будет установлена в "C:\Program Files (x86)". Классическим примером данной ошибки является 64-разрядная версия FireFox 3.5 под кодовым названием "Shiretoko", которая устанавливается в "C:\Program Files(x86)\Shiretoko". Конечно, Firefox по-прежнему будет нормально функционировать. Единственное, что вы не сможете сделать, так это изменить иконку приложения .

Примечание : Возможно, сейчас эту ошибку в Shiretoko уже исправили. Тем не менее, в ранних версиях было именно так.

Перенаправление реестра

Ключи реестра, специфические для 32-разрядных приложений, будут перенаправлены из ветки:

  • HKEY_LOCAL_MACHINE\Software
  • HKEY_LOCAL_MACHINE\Software\WOW6432Node

Так же, иногда, можно встретить записи реестра в другой ветке (хотя это необычно):

  • HKEY_CURRENT_USER\Software\WOW6432Node

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

Дублирование реестра

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

  1. Установите 32-битное приложение, которое ассоциирует себя с расширением XYZ
  2. Установите 64-разрядную версию приложения, которая связывает себя с расширением файла XYZ
  3. Установите другое 32-битное приложение, которое ассоциирует расширение XYZ с собой

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

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

Существует ряд ограничений подсистемы WOW64

Некоторые, но не все, 64-битные функции доступны 32-разрядным приложениям

Wow64 позволяет 32-разрядным приложениям использовать некоторые функции и возможности 64-битных систем. Например, при правильной настройке, такие приложения смогут использовать до 4Гб оперативной памяти. Доступ к другим функциям ограничен из-за особенности устройства 64-битных систем. Например, 64-битная ОС Windows поддерживает 64-битные логические операции. Тем не менее, 32-битные приложения не будут иметь доступ к ним, они смогут использовать только 32-битные логические операции.

Примечание : Основной причиной ограничений служит разница в представлении данных 32- и 64-битных приложений. 32-разрядное приложение попросту не рассчитано на 64-разрядные типы данных.

Нельзя смешивать между собой код (Code Injection) 32-битных и 64-битных приложений

В 64-битной ОС Windows нельзя запускать 32-битный код в 64-разрядном процессе, как и нельзя запускать 64-битный код в 32-разрядном процессе. Приложения, использующие инъекции кода (Code Injection) для добавления функциональности в существующие приложения, как правило, будут выдавать ошибки.

Этот факт объясняет, почему большинство 32-битных расширений оболочки Windows не запускаются под 64-разрядной Windows. Большинство таких расширений используют инъекцию кода (Code Injection) для встраивания в проводник Windows

WOW64 не поддерживает 16-разрядные инсталляторы

WOW64 обеспечивает поддержку 16-битных инсталляторов Microsoft, путем замены инсталлятора на совместимую 32-битную версию. Тем не менее, эта поддержка не распространяется на сторонние продукты. Так что, если вам нужно использовать старую программу, то, скорее всего, придется искать эмулятор или портативную версию.


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

Windows Virtual PC

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

Системные требования и набор функциональности существенно различается между версиями Virtual PC и версиями Windows. Так что, прежде чем пытаться использовать Virtual PC, необходимо проверить, что программа поддерживает как вашу операционную систему, так и те ОС, которые будут на ней запущены. Например, одна из последних версий уже не поддерживает версии Windows ниже Windows XP SP3.

Режим Windows XP (XPM)

Режим Windows XP это конкретная и урезанная реализация Windows Virtual PC, которая поставляется с предустановленной копией Windows XP Professional SP3. Этот режим доступен только в версиях Enterprise, Ultimate и Professional Windows 7 64-бит.

Несмотря на то, какие возможности был бы должен представлять этот режим, многие, кто использовал XPM, настоятельно советуют использовать этот режим только в качестве последнего средства. По сравнению с другими продуктами виртуализации, производительность разочаровывает, а конфигурация по умолчанию вызывает ряд вопросов безопасности.

Примечание : К некоторым более дательным настройкам режима совместимости все же можно обратиться. Более подробную информацию вы можете найти в обзоре Как запустить старые программы на Windows 7 / Vista? (см. Microsoft Application Compatibility Toolkit).

Мультизагрузка ОС Windows

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

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

Подытоживая сказанное о поддержке 32-бит в 64-разрядной Windows

Большинство 32-разрядных приложений будут вполне счастливо себя чувствовать в Windows 64. Основными исключениями будут:

  1. 32-разрядные драйверы устройств
  2. Приложения, которые не могут функционировать без 32-битных драйверов устройств, которые они используют. Яркими примерами являются антивирусы и другие программы для обеспечения безопасности.
  3. Расширения, которые используют инъекцию кода (Code injection). Например, оболочки для проводника Windows

Некоторые приложения смогут запускаться с ограничениями. Это так же касается деинсталляторов , программ для очистки реестра и программ для тюнинга , так как они имеют доступ только к той части реестра, которую им показывает Wow64.

Если вы никак не можете запустить 32-битное приложение, то рассмотрите вариант с виртуализацией или мультизагрузкой нескольких операционных систем.

Какие приложения быстрее 32-битные или 64-битные?

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

Если сравнивать 32- и 64-разрядные приложения в своих родных средах, то 32-битное приложение, как правило, использует меньше памяти, чем эквивалентное 64-разрядное приложение. Это происходит потому, что 64-битные версии используют 64-битные структуры данных, которые занимают вдвое больше места. Дополнительный размер напрямую влияет на время запуска и закрытия программы, а так же на другие виды операций, связанных с доступом к дисковым накопителям. Обычно, это означает, что 32-разрядные приложения будут выполняться быстрее. Тем не менее, использование 64-битными программами особенностей 64-разрядного процессора потенциально позволяет приложению выполняться на 25% быстрее, по сравнению с 32-битными программами.

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

Рейтинг 5.00 (6 Голосов)


Можно ли на 32-битной системе запустить игру, рассчитанную на 64 бита?

Большинство современных игр, таких как Overwatch, Hurtworld или Subnautica, могут работать исключительно на 64-разрядных операционных системах. Создателям этих программ просто не выгодно делать разные варианты приложений под 32- и 64-bit. Хотя обе версии достаточно распространены. Конечно, перейти на x64 достаточно легко. Но что делать, если вы не собираетесь переставлять ОС и при этом хотите посмотреть на популярную игру? Узнайте, как на 32-битной системе запустить Subnautica и другие 64-разрядные программы.

Для этого надо, чтобы компьютер соответствовал требованиям, необходимым для нормальной работы приложения. Процессор должен изначально иметь x64 архитектуру.

Чем отличается 32-битная система от 64-битной?

Почему же программы, рассчитанные на 64 bit, не получается открыть на 32 bit? Чем эти версии так отличаются, раз на них не работают одни и те же приложения? И если Overwatch можно запустить в x64, почему в него нельзя поиграть на таком же компьютере, но с x32?

От системы зависит, сколько оперативной памяти может быть установлено на ПК и сколько он способен выделить каждому конкретному приложению. В x64 максимальный объём RAM составляет 16 Гб (в windows 7 Professional - до 192 Гб). При этом какой-либо утилите предоставляется до 4 Гб. В версии с x32 указанные цифры гораздо меньше - 4 Гб максимум и 2 Гб отдельной программе.

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

На «слабые» машины устанавливают x32. Если у ПК не очень много оперативной памяти и не самый хороший процессор, просто нет смысла работать с 64 bit. Это будет только «перегружать» электронную вычислительную машину, не добавляя ей производительности. А вот мощному компьютеру x64 будет как раз к месту.

Несмотря на то что эти системы внешне похожи друг на друга, они сильно различаются на программном уровне. У них разный набор драйверов, поэтому Subnautica, Overwatch, Hurtworld и другие подобные не пойдут на 32-разрядной ОС, пусть даже ПК и обладает необходимыми характеристиками.

Модерным играм, приложениям, программам для редактирования графики или видео недостаточно 2 Гб, которые им выделяет x32. Компоновщики новых игр создают свои продукты с расчётом именно на x64.

Как узнать, поддерживает ли процессор x64?

Посмотреть, какая у вас установлена ОС, можно так:

  1. На рабочем столе кликните правой кнопкой мыши на значок «Мой компьютер».
  2. Пункт «Свойства». Его также можно найти в разделе «Панель управления».
  3. В строке «Тип» будет указано, сколько бит в вашей версии ОС.

Предварительно нужно понять, в какой системы вы работаете

Перед тем как запустить Overwatch на 32-битной системе, узнайте, «потянет» ли ваш ПК такую игру. Проверьте, поддерживает ли процессор 64-битные команды. Это можно сделать при помощи специальных программ-тестеров. Подойдёт, например, бесплатная утилита «SecurAble». Её не надо устанавливать. И, соответственно, не нужно удалять после эксплуатации. Просто запустите исполняемый файл. Будет показана информация о процессоре: название, тактовая частота, разрядность, поддерживает ли он D.E.P (это защита девайса от переполнения буфера) и аппаратную визуализацию. Можно кликнуть на любой из результатов - появится его описание.

Проверка поддержки процессором 64-битных команд

Если программа выдаст вердикт «Maximum 32 bit», значит, приложения, рассчитанные на x64, вряд ли будут работать. Чтобы поиграть в Overwatch или Hurtword, придётся менять процессор или утилизировать удалённые серверы.

Как сделать из 32-битной системы 64-битную?

Есть несколько утилит для так называемой виртуализации. Они эмулируют работу какой-то платформы с определённым программным и аппаратным обеспечением. Если вам надо разобраться, как запустить Hurtworld на 32-битной системе, эксплуатируйте одну из таких утилит.

Данные программы создают некую «гостевую» ОС. Но её надо в любом случае устанавливать и приобретать лицензионную версию, если она платная. Для этого у вас должен быть диск (или образ диска) с той операционкой, которая вам нужна.

Oracle VirtualBox

Универсальная программа для подобных задач.

  1. Установите её и запустите. Слева будет список установленных ОС и панель инструментов. Справа - сведения о выбранной системе.
  2. Нажмите кнопку «Создать». Появится информационное окно. Кликните «Далее».
  3. Выберите тип и версию ОС. Там есть много вариантов на выбор: не только Microsoft windows, но и Linux.
  4. Затем необходимо будет решить, сколько оперативной памяти выделить «гостевой» системе.
  5. После этого нужно создать виртуальный диск (на который запишутся файлы ОС). Можете выбрать уже существующий или сделать новый. И поставьте галочку рядом с опцией «Загрузочный диск».
  6. В следующем окне отметьте, фиксированный ли объём будет у диска или динамический (изменяющийся). К каждому пункту есть подробные пояснения. Загрузочный лучше делать фиксированным. Впоследствии можно добавить другие диски.
  7. Настройте размер виртуального хранилища. Обычно хватает 10 Гб. Создавать его лучше в отдельном месте - не в том, куда установлена основная система.
  8. Дождитесь окончания процесса. В списке доступных появится новая.

Один из способов - это использование утилит виртуализации

После можно настроить аппаратную часть:

  1. Выберите гостевую ОС и нажмите «Свойства».
  2. В разделе Общие - Дополнительно поменяйте папку для сохранения снимков на ту, которая удобна вам.
  3. Там же настройте буфер обмена. Он определяет, как будет передаваться информация между разными ОС.
  4. Во вкладке «Система» можете выбрать характеристики виртуальной материнской платы и процессора.
  5. Пункт «Сеть» нужен для настройки доступа во всемирную паутину. Можно оставить настройки по умолчанию.
  6. В разделе «Носители» укажите, откуда нужно взять ОС. Если установщик находится на CD, вставьте его в дисковод. Для загрузки с.ISO нажмите на кнопку «Открыть» рядом со списком «Привод». Она выглядит как жёлтая папка.
  7. Туда же можно добавить другие образы для быстрого переключения между ними: базы данных, приложения, игры.

После окончания настройки нажмите «OK». Чтобы запустить гостевую ОС, кликните на неё и на кнопку «Старт». Будет произведена установка. И вы сможете переключаться между системами: играть в 64-битной, а работать в 32-разрядной.

Другие виртуальные машины

Существуют ещё утилиты для работы с виртуальными машинами:

  • VMware Workstation. Серьёзная профессиональная программа для сложных задач. Она распространяется на платной основе.
  • Простенькая утилита для аппаратной эмуляции. Имеет открытый исходный код.
  • windows Virtual PC. Работает только с windows-системами. Можно настраивать приоритет процессов - так онлайн-машине автоматически будут выделяться ресурсы, если она выполняет определённую задачу.
  • Virt-Manager. Предоставляет широкие возможности по настройке аппаратной составляющей - доступно виртуальное оборудование на любой вкус.

Облачные вычисления (удалённые серверы)

Если производительности всё равно не хватает для запуска игры, можно сделать это на удалённом сервере. Все расчёты, вся информация будет обрабатываться на нём. Так вам не помешают никакие ограничения, связанные с x32. Ведь по сути приложения будут «открываться» на подходящих системах. Только не на вашем компьютере.

Для этого подойдёт программа Microsoft Azure. С её помощью можно создать несколько операционок для разных целей. Любителям игр также пригодится специализированный сервис виртуализации видеокарты NVIDIA GRID. Данным утилитам нужен высокоскоростной интернет.

Ультрасовременные облачные сервисы расширяют наши возможности

Работа с 64-разрядными приложениями на системе с 32 bit вполне возможна. Но нужно устанавливать дополнительный софт или, вообще, переходить на удалённый сервер. Сделать это достаточно сложно. Если вы хотите полноценно играть в Overwatch, Hurtword и другие популярные игры, лучше установить x64 ОС. Так не возникнет проблем с совместимостью. И не надо будет ничего настраивать.

NastroyVse.ru

windows x64 - Почему все ещё так много 32-разрядных программ?

Ваш компьютер, вероятнее всего, работает на 64-разрядной версии windows. Но если открыть «Диспетчер задач», то Вы увидите, что большинство программ в Вашей системе все еще 32-разрядные. Действительно ли это проблема? Есть много различий между 64-разрядными и 32-разрядными версиями windows. 64-разрядные версии windows могут выполнять 32-разрядное программное обеспечение, но 32-разрядные версии windows не могут выполнить 64-разрядное программное обеспечение.

Как узнать разрядность программы?

Давайте воспользуемся диспетчером задач, чтобы увидеть, какие из ваших программ являются 64-разрядными, а какие 32-разрядными. Щелкните правой кнопкой мыши на панели задач и выберите пункт «Диспетчер задач» или нажмите комбинацию клавиш Ctrl + Shift + Esc, чтобы открыть его. Посмотрите на столбец с названиями процессов. Если Вы будете использовать 64-разрядную версию windows 8.1 или 8, то Вы увидите слово «(32-bit)» после каждого имени 32-разрядной версии программы. Если Вы будете использовать 64-разрядную версию windows 7, то Вы увидите вместо этого «*32». 32-разрядные программы обычно устанавливаются в папку C:\Program Files (x86)\ на 64-разрядных версиях windows, в то время как 64-разрядные программы обычно устанавливаются в папку C:\Program Files\. Это - просто правило. Но ни кто не говорит, что нет другого правила, в котором запрещается устанавливать 64-разрядные программы в папку C:\Program Files (x86)\. Например, Steam - 32-разрядная программа, таким образом, она устанавливается в «C:\Program Files (x86)\» по умолчанию. Игры, которые Вы устанавливаете в Steam, установлены в папку C:\Program Files (x86)\Steam по умолчанию, в т.ч. даже 64-разрядные версии игр. Если Вы сравните две различные папки Program Files, то Вы найдете, что большинство Ваших программ, вероятнее всего, установлены в папку C:\Program Files (x86). И, эти программы в большинстве своём являются 32-разрядными.

Работа 32-разрядного программного обеспечения на 64-разрядной операционной системе

На первый взгляд, это кажется ужасным, что большинство ваших программ windows, не пользуются 64-битной архитектурой операционной системы. Вы можете подумать, что есть потери в производительности для запуска 32-разрядных программ в 64-разрядной операционной системы, но это не так. windows выполняет 32-разрядные программы через уровень совместимости WoW64 на 64-разрядных версиях windows. Однако 64 -разрядные процессоры Intel и AMD обратно совместимы и могут напрямую выполнять 32-разрядное программное обеспечение. Все ваши 32-разрядные windows-программы будут работать так же, как они работали бы на 32-разрядной версии windows. Таким образом, нет никаких препятствий к выполнению этих программ на 64-разрядной операционной системе. Даже если каждая программа, которую Вы используете, является все еще 32-разрядной, то Вы извлечете выгоду, потому что Ваша операционная система сама будет работать в 64-разрядном режиме. А, 64-разрядная версия windows является более безопасной.

64-битные программы и 32-битные программы: что лучше?

32-битные программы запускаются без проблем на 64-битных версиях операционных систем windows. Но было бы лучше, если бы все ваши программы были бы 64-битными? Есть определенно преимущества у 64-битных программ. 32-разрядные программы могут использовать только 2 ГБ памяти, в то время как 64-битные программы могут использовать гораздо больше. Если программа, скорее всего, попала под атаку, дополнительные функции безопасности, применяемые к 64-битных программ, могут помочь. Google Chrome в настоящее время является 32-битным приложением даже на 64-битных версиях ОС windows, но уже появилась 64-битная бета версия этой программы. И Google обещает, что 64-битная версия Chrome будет быстрее, более безопасной и более стабильной. Некоторые программы предлагают 64-разрядные версии. Например: Photoshop, Itunes, Microsoft Office, и некоторые из самых популярных программ для windows, и все они доступны в 64-битном виде. Последние игры тоже часто являются 64-разрядными, чтобы они могли использовать более 2 ГБ памяти. Многие программы не сделали переход на 64-бита, и большинство никогда его не сделают. Вы все еще можете запускать сегодня большинство 32-битных программ windows, даже те которые были выпущены десять лет назад, на 64-битной версии windows, даже если их разработчики уже обновляют. Разработчик, который хочет обеспечить 64-разрядную версию своей программы, должен выполнять много дополнительной работы. Он должен убедиться, что существующий код компилируется и правильно работает как 64-битное программное обеспечение. Он должен обеспечить и поддерживать две отдельные версии программы, так как пользователи под управлением 32-разрядной версии ОС windows, не могут использовать 64-разрядную версию. Давайте возьмем, в качестве примера программу Evernote для настольной версии windows. Даже если они выпустили бы 64-разрядную версию Evernote, пользователи, вероятнее всего, не заметили бы разницы вообще. 32-разрядная программа может прекрасно работать и на 64-разрядной версии windows, и если нет заметных преимуществ, то нет и смысла в 64-битной версии.

Где найти 64-разрядные приложения

Вы, как правило, не будете способны выбирать между 32-битной и 64-битной версий программного обеспечения. Например, при установке Itunes для windows, веб-сайт компании Apple автоматически направляет вас к 32-разрядной или 64-разрядной версии установщика в зависимости от версии windows. При установке Photoshop для windows, как правило устанавливаются и 32-разрядные, и 64-разрядные исполняемые файлы. Photoshop автоматически выбирает из них. Иногда вы можете увидеть отдельные ссылки для загрузки 32-битных и 64-битных версий программ, но это не так распространено. Важно не заниматься поиском 64-битных приложений, а найти приложения, которые работают хорошо для вас. Для большинства приложений, на самом деле не имеет значения 64-битная версия или 32-битная.

Легко задаться вопросом, почему так много приложений все еще 32-битные, когда вы открываете ваш менеджер задач. Но это не очень большая проблема и вот почему. Потому, что большинство приложений ни чего не выигрывают при переходе на 64-битные редакции версии программ. Даже если разработчики сделали всю работу и выпустили 64-битные версии всех маленьких настольных приложений и утилит, которые вы используете в windows, то вы не смогли бы заметить разницу для большинства из них.

itchief.ru

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

В статье рассмотрены основные шаги, обеспечивающие корректный перенос 32-битных windows приложений на 64-битные windows системы. Хотя статья ориентирована на разработчиков, использующих язык Си/Си++ в среде Visual Studio 2005/2008, она будет полезна и другим разработчикам, планирующим перенос своих приложений под 64-битные системы. В статье описаны основные моменты, с которыми сталкиваются разработчики, планирующие мигрировать 32-битные программы на 64-битные системы. Конечно, список рассмотренных вопросов не полон, но хочется надеяться, что со временем будет предложен расширенный вариант этой статьи. Автор будет благодарен отзывам, комментариям и вопросам, которые позволят улучшить информативность этой статьи. В рамках архитектуры вычислительной техники под термином "64-битный" понимают 64-битные целые и другие типы данных, имеющих размер 64 бита. Под «64-битными» системами могут пониматься 64-битные архитектуры микропроцессоров (например, EM64T, IA-64) или 64-битные операционные системы (например, windows XP Professional x64 Edition) . 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. В таблице N1 приведены сведения об основных моделях данных.


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

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

Начать освоение 64-битных систем следует с вопроса «А нужно ли нам пересобрать свой проект для 64-битной системы?». На этот вопрос надо обязательно дать ответ, но не торопясь, подумав. С одной стороны можно отстать от своих конкурентов, вовремя не предложив 64-битные решения. С другой - можно впустую потратить время на 64-битное приложение, которое не даст никаких конкурентных преимуществ. Перечислим основные факторы, которые помогут сделать вам выбор. Не следует создавать 64-битную версию приложения с коротким жизненным циклом. Благодаря подсистеме WOW64 старые 32-битные приложения достаточно хорошо работают на 64-битных windows системах и поэтому делать программу 64-битной, которая через 2 года перестанет поддерживаться, смысла не имеет . Более того, практика показала, что переход на 64-битные версии windows затянулся и возможно большинство ваших пользователей в краткосрочной перспективе будут использовать только 32-битный вариант вашего программного решения. Если планируется длительное развитие и длительная поддержка программного продукта, то следует начинать работать над 64-битным вариантом вашего решения. Это можно делать неспешно, но учтите, что чем дольше у вас не будет полноценного 64-битного варианта, тем больше сложностей может возникать с поддержкой такого приложения, устанавливаемого на 64-битные версии windows. Перекомпиляция программы для 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). Если вы разрабатываете библиотеки, компоненты или иные элементы, с помощью которых сторонние разработчики создают свое программное обеспечение, то вы должны проявить оперативность в создании 64-битного варианта своей продукции. В противном случае, ваши клиенты, заинтересованные в выпуске 64-битных версий, будут вынуждены искать альтернативные решения. Например, некоторые разработчики программно-аппаратной защиты откликнулись с большой задержкой на появление 64-битных программ, что заставило ряд клиентов искать другие инструменты для защиты своих программ. Дополнительным преимуществом от выпуска 64-битной версии библиотеки является то, что вы можете продавать ее как отдельный продукт. Таким образом, ваши клиенты, желающие создавать как 32-битные, так и 64-битные приложения будут вынуждены приобретать 2 различные лицензии. Например, такая политика используется компанией Spatial Corporation при продаже библиотеки Spatial ACIS. Прежде чем планировать работу над созданием 64-битной версий вашего продукта выясните, имеются ли 64-битные варианты библиотек и компонентов, которые в нем используются. Также узнайте, какова ценовая политика по отношению к 64-битному варианту библиотеки. Все это можно выяснить, посетив сайт разработчика библиотеки. Если поддержка отсутствует, то заранее поищите альтернативные решения, поддерживающие 64-битные системы. Если в ваших решениях все еще присутствуют 16-битные модули, то пора от них избавиться. Работа 16-битных приложений в 64-битных версиях windows не поддерживается. Здесь следует пояснить один момент, связанный с использованием 16-битных инсталляторов. Они до сих пор используются для установки некоторых 32-битных приложений. Создан специальный механизм, который на лету подменяет ряд наиболее популярных 16-битных инсталляторов на более новые версии. Это может вызвать неверное мнение, что 16-битные программы по-прежнему работают в 64-битной среде. Помните, это не так. Не забывайте, что использование большого объема кода на ассемблере, может существенно повысить стоимость создания 64-битной версии приложения. Взвесив все перечисленные факты, все за и против, примите решение, следует ли вам переносить ваш проект на 64-битные системы. И если это так, то давайте пойдем дальше. Если вы приняли решение о разработке 64-битной версии вашего продукта и готовы потратить на это время, это еще не гарантирует успех. Дело в том, что вы должны обладать всем необходимым инструментарием и здесь могут быть неприятные казусы.

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

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

Таблица N2. Возможности различных редакций Visual Studio 2008 Можно конечно использовать виртуальные машины для запуска 64-битных приложений на 32-битной технике, но это крайне неудобно и не обеспечит необходимого уровня тестовых испытаний. Желательно, чтобы в машинах было установлено не менее 4-8 гигабайт оперативной памяти. Если библиотеки представлены в исходных кодах, то должна присутствовать 64-битная конфигурация проекта. Самостоятельно заниматься модернизацией библиотеки для ее сборки под 64-битную систему может быть неблагодарным и сложным занятием, а результат может оказаться ненадежным и содержащим ошибки. Также вы можете нарушить этим лицензионные соглашения. Если вы используете библиотеки в виде бинарных модулей, то вы также должны узнать, существуют ли 64-битные модули. Вы не сможете использовать 32-битные DLL внутри 64-битного приложения. Можно создать специальную обвязку через COM, но эта будет отдельной большой, сложной задачей . Также учтите, что приобретение 64-битной версии библиотеки может стоить дополнительных денег. Visual C++ не поддерживает 64-битный встроенный ассемблер. Вы должны использовать или внешний 64-битный ассемблер (например, MASM) или иметь реализацию той же функциональности на языке Си/Си++ . Существенная переработка методологии тестирования, модернизация юнит-тестов, использование новых инструментальных средств. Более подробно об этом будет сказано ниже, но не забывайте учесть это на этапе оценки временных затрат на миграцию приложения на новую систему . Если вы разрабатываете ресурсоемкие приложения, потребляющие большой объем оперативной памяти, то вам необходимо позаботиться о пополнении базы тестовых входных данных. При нагрузочном тестировании 64-битных приложений желательно выходить за пределы 4 гигабайт потребляемой памяти. Многие ошибки могут проявиться только при таких условиях. Используемая система защиты, должна поддерживать 64-битные системы в полном необходимом вам объеме. Например, компания Aladdin достаточно быстро выпустила 64-битные драйвера для поддержки аппаратных ключей Hasp. Но очень долго отсутсвовала система автоматической защиты 64-битных бинарных файлов (программа Hasp Envelop). Таким образом, механизм защиты приходилось реализовывать самостоятельно внутри программного кода, что являлось дополнительной сложной задачей, требующей квалификации и времени. Не забывайте про подобные моменты, связанные с обеспечением защиты, системой обновлений и так далее. Необходимо наличие нового инсталлятора, способного полноценно устанавливать 64-битные приложения. Хочется здесь сразу предостеречь об одной традиционной ошибке. Это создание 64-битных инсталляторов для установки 32/64-битных программных продуктов. Подготавливая 64-битую версию приложения, разработчики часто хотят довести «64-битность» в нем до абсолюта. И создают 64-битный инсталлятор, забывая о том, что у пользователей 32-битной операционной системы такой инсталляционный пакет просто не запустится. Обратим внимание, что не запустится не 32-битное приложение включенное в дистрибутив наряду с 64-битным, а именно сам установщик. Ведь если дистрибутив представляет собой 64-битное приложение, то на 32-битной операционной системе он, конечно же, не запустится. Самое обидное в этом то, что пользователь никак не сможет догадаться, что же происходит. Он просто увидит инсталляционный пакет, который невозможно запустить. Создание 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. Здесь было бы хорошо рассказать о типичных проблемах, возникающих на этапе компиляции 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 системы. Если вы думаете, что после исправления всех ошибок компиляции будет получено долгожданное 64-битное приложение, то придется вас разочаровать. Самое сложное впереди. На этапе компиляции вами будут исправлены самые явные ошибки, которые смог обнаружить компилятор, которые в основном связаны с невозможностью неявного приведения типов. Но это верхушка айсберга. Основная часть ошибок скрыта. Эти ошибки с точки зрения абстрактного языка Си++ смотрятся безопасно или замаскированы явными приведениями типов. Таких ошибок в несколько раз больше, чем количество ошибок выявленных на этапе компиляции.

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

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

MyObj* pObj = ... ::SendMessage(hwnd, msg, (WORD)x, (DWORD)pObj);
Здесь явное приведение типа используется для превращения указателя в числовой тип. Для 32-битной архитектуры приведенный пример корректен, так как последний параметр функции SendMessage имеет тип LPARAM, который на 32-битной архитектуре совпадает с DWORD. Для 64-битной архитектуре использование DWORD ошибочно и должно быть заменено на LPARAM. Тип LPARAM имеет в зависимости от архитектуры размер 32 или 64 бита.

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

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

size_t __fread(void * __restrict buf, size_t size, size_t count, FILE * __restrict fp); size_t fread(void * __restrict buf, size_t size, size_t count, FILE * __restrict fp) { int ret; FLOCKFILE(fp); ret = __fread(buf, size, count, fp); FUNLOCKFILE(fp); return (ret); }
Функция __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

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

ptrdiff_t SetBitN(ptrdiff_t value, unsigned bitNum) { ptrdiff_t mask = 1
Приведенный код работоспособен на 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:

ptrdiff_t mask = ptrdiff_t(1)
Заметим также, что неисправленный код приведет еще к одной интересной ошибке. При выставлении 31 бита на 64-битной системе результатом работы функции будет значение 0xffffffff80000000 (см. рисунок 6). Результатом выражения 1 size_t ArraySize = N * 4; size_t *Array = (size_t *)malloc(ArraySize); Основными числами, к которым следует отнестись с осторожностью при переходе на 64-битную платформу приведены в таблице N4.

Таблица N4. Основные магические значения, опасные при переносе приложений с 32-битной на 64-битную платформу В программах обрабатывающих большие объемы данных могут встретиться ошибки связанные с индексацией больших массивов или возникнуть вечные циклы. Следующий пример содержит сразу 2 ошибки:

const size_t size = ...; char *array = ...; char *end = array + size; for (unsigned i = 0; i != size; ++i) { const int one = 1; end[-i - one] = 0; }
Первая ошибка заключается в том, что если размер обрабатываемых данных превысит 4 гигабайта (0xFFFFFFFF), то возможно возникновение вечного цикла, поскольку переменная "i" имеет тип "unsigned" и никогда не достигнет значения 0xFFFFFFFF. Я специально пишу, что возникновение возможно, но не обязательно оно произойдет. Это зависит от того, какой код построит компилятор. Например, в отладочном (debug) режиме вечный цикл будет присутствовать, а в release-коде зацикливание исчезнет, так компилятор примет решение оптимизировать код, используя для счетчика 64-битный регистр и цикл будет корректным. Все это добавляет путаницы, и код который работал вчера, неожиданно может перестать работать на следующий день. Вторая ошибка связана с проходом по массиву от конца к началу для чего используются отрицательные значения индексов. Приведенный код работоспособен в 32-битном режиме, но при его запуске на 64-битной машине на первой же итерации цикла произойдет доступ за границы массива и программа аварийно завершится. Рассмотрим причину такого поведения. Согласно правилом языка Си++ на 32-битной системе выражение "-i - one" будет вычисляться следующим образом (на первом шаге i = 0):
  1. Выражение "-i" имеет тип unsigned и имеет значение 0x00000000u.
  2. Переменная "one" будет расширена от типа "int" до типа unsigned и будет равна 0x00000001u. Примечание: Тип int расширяется (согласно стандарту языка Си++) до типа "unsigned", если он участвует в операции, где второй аргумент имеет тип unsigned.
  3. Происходи операция вычитания, в котором участвуют два значения типа unsigned и результат выполнения операции равен 0x00000000u - 0x00000001u = 0xFFFFFFFFu. Обратите внимание, что результат имеет беззнаковый тип.
  4. На 32-битной системе обращение к массиву по индексу 0xFFFFFFFFu эквивалентно использованию индекса -1. То есть end является аналогом end[-1]. В результате происходит корректная обработка элемента массива.
В 64-битной системе в последнем пункте картина будет иной. Произойдет расширение типа unsigned до знакового ptrdiff_t и индекс массива будет равен 0x00000000FFFFFFFFi64. В результате произойдет выход за рамки массива. Для исправления кода необходимо использовать такие типы, как ptrdiff_t и size_t. Бывают ошибки, в которых, в общем, то никто не виноват, но они от этого не перестают быть ошибками. Представьте, что давным-давно в далекой галактике (в Visual Studio 6.0) был разработан проект, в котором присутствует класс CSampleApp, являющийся наследником от CWinApp. В базовом классе есть виртуальная функция WinHelp. Наследник перекрывает эту функцию и выполняет необходимые действия. Визуально это представлено на рисунке 7.

Рисунок 7. Работоспособный корректный код, который создан в Visual Studio 6.0 Затем проект переносится на Visual Studio 2005, где прототип функции WinHelp изменился, но этого никто не замечает, так как в 32-битном режиме типы DWORD и DWORD_PTR совпадают и программа продолжает корректно работать (рисунок 8).

Рисунок 8. Не корректный, но работоспособный 32-битный код Ошибка ждет, чтобы проявить себя в 64-битной системе, где размер типов DWORD и DWORD_PTR различен (рисунок 9). Получается, что в 64-битном режиме классы содержат две РАЗНЫЕ функции WinHelp, что естественно некорректно. Учтите, что подобные ловушки могут скрываться не только в MFC, где часть функций изменили типы своих аргументов, но и в коде ваших приложений и сторонних библиотек.

Рисунок 9. Ошибка проявляет себя в 64-битном коде Примеры подобных 64-битных ошибок можно приводить и приводить. Тем, кто заинтересовался подобными ошибками и хочет более подобно узнать о них будет интересна статья «20 ловушек переноса Си++ - кода на 64-битную платформу» . Как видите, этап поиска скрытых ошибок представляет нетривиальную задачу, тем более что многие из них будут проявляться нерегулярно или только на больших входных объемах данных. Для диагностики подобных ошибок хорошо подходят статические анализаторы кода, так как они могут проверять весь код приложения, в не зависимости от входных данных и частоты выполнения его участков в реальных условиях. Использовать статический анализ есть смысл как на этапе переноса приложения на 64-битные платформы, чтобы найти большинство ошибок на самом начальном этапе, так и в дальнейшей разработке 64-битных решений. Статические анализ предупредит и научит программиста лучше понимать особенности ошибок связанных с 64-битной архитектурой и писать более эффективный код. Автор статьи является разработчиком одного из таких специализированных анализаторов кода, носящий название Viva64 . Более подробно познакомиться с инструментом и скачать демонстрационную версию можно c сайта компании ООО «Системы программной верификации». В качестве справедливости следует сказать, что в таких анализаторах кода как Gimpel PC-Lint и Parasoft C++Test имеются наборы правил для диагностики 64-битных ошибок. Но, во-первых, это анализаторы общего назначения и правила диагностики 64-битных ошибок в них представлены слабо. Во-вторых они больше ориентированы на модель данных LP64 используемую в семействе операционных систем Linux, что снижает их пользу для windows программ, где используется модель данных LLP64 . Описанный в предыдущем разделе шаг поиска ошибок в программном коде необходимый, но недостаточный шаг. Ни один метод, в том числе статического анализа кода, не дает полной гарантии обнаружения всех ошибок и наилучший результат может быть достигнут только при комбинации различных методик.

Если ваша 64-битная программа обрабатывает больший объем данных, чем 32-битная версия то необходимо расширить тесты, чтобы включить в них обработку данных объемом более 4 гигабайт. Эта та граница, за которой начинают проявлять себя многие 64-битные ошибки. Времени такие тесты могут занимать на порядок больше и к этому надо быть заранее готовым. Обычно тесты пишут так, чтобы обрабатывать в каждом тесте небольшое количество элементов и тем самым иметь возможность проходить все внутренние юнит-тесты, например? за несколько минут, а автоматические тесты (например, с использованием AutomatedQA TestComplete) за несколько часов. Функция сортировки на 32-битной системе, если она сортирует 100 элементов, почти с полной гарантией будет корректна себя вести на 100000 элементах. Но та же функция на 64-битной системе может подвести при попытке обработать 5 миллиардов элементов. Скорость выполнения юнит-теста может понизиться в миллионы раз. Не забудьте заложить стоимость адаптации тестов при освоении 64-битных систем. Одним из решений является разделение юнит-тестов на быстрые (работающие с малым объемом памяти) и медленные, обрабатывающих гигабайты и запускаемые, например, ночью. Автоматизированное тестирование ресурсоемких 64-битных программ можно построить на основе распределенных вычислений.

gastroguru © 2017