Прежде чем приступить к тематике разработки кода 64-битных программ, остановимся на вопросе обратной совместимости 64-битных версий Windows с 32-битными приложениями. Обратная совместимость осуществляется за счет механизмов, реализованных в WoW64.
WoW64 (Windows-on-Windows 64-bit) — подсистема операционной системы Windows, позволяющая запускать 32-битные приложения на всех 64-битных версиях Windows.
Подсистема WoW64 не поддерживает следующие программы:
- программы, скомпилированные для 16-разрядных операционных систем;
- программы режима ядра, скомпилированные для 32-разрядных операционных систем.
Накладные расходы
Существуют различия WoW64 в зависимости от архитектуры процессора. Например, 64-битная версия Windows разработанная для процессора Intel Itanium 2 использует WoW64 для эмуляции x86 инструкций. Такая эмуляция весьма ресурсоемка по сравнению с WoW64 для архитектуры Intel 64, так как происходит переключение с 64-битного режима в режим совместимости при выполнении 32-битных программ.
Гайд как установить OBS 32 bit и больше
WoW64 на архитектуре Intel 64 (AMD64 / x64) не требует эмуляции инструкций. Здесь подсистема WoW64 эмулирует только 32-битное окружение за счет дополнительной прослойки между 32-битным приложением и 64-битным Windows API. Где-то эта прослойка тонкая, где-то не очень. Для средней программы потери в производительности из-за наличия такой прослойки составят около 2%.
Для некоторых программ это значение может быть больше. Два процента — это немного, но следует учитывать, что 32-битные приложения работают немного медленнее под управлением 64-битной операционной системы Windows, чем в 32-битной среде.
Компиляция 64-битного кода не только исключает необходимость в WoW64, но и дает дополнительный прирост производительности. Это связано с архитектурными изменениями в микропроцессоре, такими, как увеличение количества регистров общего назначения. Для средней программы можно ожидать в пределах 5-15% прироста производительности от простой перекомпиляции.
Преимущество 64-битной среды для 32-битных программ
Из-за наличия прослойки WoW64 32-битные программы работают менее эффективно в 64-битной среде, чем в 32-битной. Но все-таки простые 32-битные приложения могут получить одно преимущество от их запуска в 64-битной среде. Вы, наверное, знаете, что программа, собранная с ключом /LARGEADDRESSAWARE:YES, может выделять до 3-х гигабайт памяти, если 32-битная операционная система Windows запущена с ключом /3gb. Так вот, эта же 32-битная программа, запущенная на 64-битной системе, может выделить почти 4 GB памяти (на практике около 3.5 GB).
Перенаправления
Подсистема WoW64 изолирует 32-разрядные программы от 64-разрядных путем перенаправления обращений к файлам и реестру. Это предотвращает случайный доступ 32-битных программ к данным 64-битных приложений. Например, 32-битное приложение, которое запускает файл DLL из каталога %systemroot%System32, может случайно обратиться к 64-разрядному файлу DLL, который несовместим с 32-битной программой. Во избежание этого подсистема WoW64 перенаправляет доступ из папки %systemroot%System32 в папку %systemroot%SysWOW64. Это перенаправление позволяет предотвратить ошибки совместимости, поскольку при этом требуется файл DLL, созданный специально для работы с 32-разрядными приложениями.
Mac OS Big Sur — запуск 32 битных приложений
Подробнее с механизмами перенаправления файловой системы и реестра можно познакомиться в разделе MSDN «Running 32-bit Applications».
Почему невозможно использовать в 64-битной программе 32-битные DLL? Можно ли это обойти?
Загрузить 32-битную DLL из 64-битного процесса и выполнить код из неё невозможно. Невозможно в силу дизайна 64-битных систем. В принципе, невозможно. Не помогут ни хитрости, ни недокументированные пути. Для этого нужно загрузить и проинициализировать WoW64, не говоря уже о структурах в ядре.
Фактически нужно будет на лету превратить 64-битный процесс в 32-х битный. Подробнее эта тема рассмотрена в посте «Недокументированные функции; Загрузка 32-х битных DLL в 64-х битный процесс». Единственное, что можно порекомендовать, — это создание суррогатного процесса и взаимодействия с ним посредством технологии COM. Об этом рассказывается в статье «Accessing 32-bit DLLs from 64-bit code».
А вот загрузить ресурсы из 32-битной DLL в 64-битный процесс совсем несложно. Это можно сделать, если при вызове LoadLibraryEx указать флаг LOAD_LIBRARY_AS_DATAFILE.
Постепенный отказ от поддержки 32-битных программ
Вполне естественно, если компания Microsoft будет стимулировать переход на 64-битные системы, постепенно отказываясь от поддержки 32-битных программ в ряде версий операционной системы Windows. Конечно, это будет очень медленный процесс. Но все-таки первые шаги в этом направлении уже сделаны.
Многие администраторы знают про относительно новый режим установки и работы серверной версии операционной системы под названием Server Core. Это тот режим, о котором участники войн «Windows vs Linux» говорили очень давно. Одним из аргументов сторонников использования Linux на сервере была возможность установить серверную ОС без графического интерфейса (GUI). Но вот и в Windows Server появилась такая возможность. Установка в этом режиме позволяет получить только командную строку без пользовательского интерфейса.
Эта возможность (установка Server Core) появилась в Windows Server 2008. Но в Windows Server 2008 R2 появилось нововведение, приближающее 64-битное будущее. При установке Windows Server 2008 R2 (Server Core) поддержка запуска 32-битных приложений стала опциональной. Причем по умолчанию эта поддержка выключена. И при попытке запуска 32-битного приложения в режиме Server Core пользователь получит сообщение о невозможности запуска. Конечно, можно добавить поддержку 32-битных программ:
start /w ocsetup ServerCore-WOW64
В обычном (Full Installation) режиме 32-битные приложения по умолчанию запускаются, а вот в Server Core уже нет.
Тенденция очевидна. Со временем все более рациональным будет создание 64-битных версий приложений, так как они смогут функционировать на большем числе версий операционных систем.
Дополнительная информация
Интересным источником информации по системе WoW64 является блог Алексея Пахунова: http://blog.not-a-kernel-guy.com/. Алексей является сотрудником компании Microsoft и принимает непосредственное участие в разработке подсистемы WoW64.
Источник: pvs-studio.ru
Windows 64-bit или 32-bit: какая лучше для вашего компьютера
В процессе установки Windows или обыкновенных программ вы наверняка сталкивались с выбором между 32- и 64-разрядной версиями софта. Если нет, то ещё столкнётесь.
Что такое разрядность
Разрядностью называют количество информации, которое процессор способен обработать за один такт. В зависимости от этой величины чипы делят на два типа: 32-разрядные (32-битные), обрабатывающие по 32 бита за такт, и 64-разрядные (64-битные), обрабатывающие по 64 бита.
Из классификации железа вытекает и разделение софта. Операционные системы и программы, спроектированные для работы на 32-разрядных процессорах, тоже называют 32-разрядными (32-битными). А ПО, предназначенное для 64-разрядных чипов, — 64-разрядным (64-битным).
В чём отличия двух архитектур
Во-первых, они по-разному потребляют память. 32-разрядные Windows и сторонние программы, как и 32-разрядные процессоры, не могут использовать больше 4 ГБ ОЗУ, сколько бы памяти ни было в компьютере. А для 64-разрядной архитектуры подобного ограничения нет, и, более того, она работает с ОЗУ эффективнее.
Если у вас 32-разрядная Windows или 32-разрядный процессор, то нет смысла устанавливать больше 4 ГБ ОЗУ.
Во-вторых, от разрядности зависит совместимость операционной системы или любого стороннего ПО с компьютером.
- 32-разрядные Windows и 32-разрядные программы можно устанавливать на любые компьютеры.
- 64-разрядные Windows можно устанавливать только на компьютеры с 64-битными процессорами.
- 64-разрядные программы можно устанавливать только на компьютеры с 64-битными процессорами, на которых работает 64-разрядная Windows.
Какую Windows устанавливать: 32 или 64 бита
Если у вас 32-разрядный чип или меньше 2 ГБ ОЗУ, то выбора нет: на вашей системе нормально будет работать только 32-битная ОС.
Если у вас 64-разрядный процессор и от 2 ГБ ОЗУ, устанавливайте 64-разрядную версию Windows как более современную и эффективную.
Чтобы узнать архитектуру своего чипа, наберите в поиске Windows «система» и откройте найденный раздел: нужная информация будет указана в поле «Тип системы». 32-разрядная архитектура обозначается как x86, 64-разрядная — как x64.
Какие программы устанавливать: 32 или 64 бита
Если у вас 32-разрядный процессор или 32-разрядная версия операционной системы, то вам доступен только один вариант — 32-разрядные программы.
Если у вас 64-разрядный процессор и 64-разрядная Windows, выбирайте 64-разрядное ПО. 32-разрядные версии программ устанавливайте только в том случае, если эти программы вообще не имеют 64-разрядных версий.
Разрядность Windows, которая установлена на вашем компьютере, можно узнать в том же меню, что и разрядность процессора: наберите в поиске «система» и откройте найденный раздел.
Как перейти с 32-разрядной Windows на 64-разрядную
Допустим, у вас 64-разрядный процессор, но установленная 32-битная Windows не позволяет использовать 64-разрядные программы. В таком случае есть смысл перейти на 64-битную версию ОС. Для этого нужно переустановить Windows, выбрав в процессе 64-битную версию.
Источник: lifehacker.ru
Как сменить 32 разрядную Windows на 64 разрядную.
Ранее операционная система Windows имела 32 битную разрядность. Постепенно, с развитием архитектуры процессоров, появилась возможность поддержки 64 битной разрядности системы (начало было положено с выпуска Windows XP Professional x64 Edition).
В настоящее время, производители компьютеров (настольных компьютеров, ноутбуков), в основном, устанавливают на выпускаемые устройства 64 разрядные операционные системы Windows, потому что все современные центральные процессоры поддерживают x64 наборы инструкций.
Microsoft предоставляет возможность смены 32 разрядной системы на 64 разрядную Windows. При смене разрядности системы, активация Windows не слетит, потому что лицензия не зависит от разрядности операционной системы.
Основные различия между 32 битной Windows и 64 битной Windows
- в Windows x64 можно установить 64 и 32 битные программы (64 битные приложения, по умолчанию, устанавливаются в папку Program Files, а 32 битные в папку Program Files (x86) на системном диске)
- в Windows х86 устанавливаются только 32 битные программы, а установка 64 битных приложений не поддерживается
Необходимое условие для перехода Windows с 32 bit на 64 bit
- Процессор x64 — поддерживается установка на компьютер 64 и 32 разрядной Windows
- Процессор x86 — на компьютер можно установить только 32 битную версию Windows
Как узнать поддержку процессором инструкций x64 в Windows 10
Для того, чтобы узнать поддерживает ли процессор, установленный на компьютере, 64 битные инструкции в операционной системы Windows 10, выполните следующие шаги:
- На Рабочем столе кликните по значку «Этот компьютер» (Мой компьютер). Если на Рабочем столе вашего компьютера данного значка нет, с помощью этого способа верните значок «Мой компьютер» на Рабочий стол.
- В открывшемся контекстном меню выберите «Свойства».
- В окне «Система» (Просмотр основных сведений о вашем компьютере), в разделе «Система», в параметре «Тип системы» вы увидите тип разрядности операционной системы и поддержку типа инструкций процессора.
В данном случае, обозначение: «процессор х64», означает, что центральный процессор поддерживает установку 64 разрядной операционной системы (на компьютере установлена Windows 10 64-bit).
Как узнать поддержку процессором 64 разрядной Windows 8.1 (Windows 8)
В операционной системе Windows 8.1 или Windows 8, проделайте следующее:
- Подведите курсор мыши к правому нижнему углу экрана, выберите «Параметры».
- В окне «Система» отобразится «Просмотр основных сведений о вашем компьютер». В параметрах «Система» => «Тип системы», указаны разрядность Windows и какую разрядность поддерживает центральный процессор.
На данном компьютере установлена 32 разрядная ОС Windows 8.1, на ПК имеется процессор с поддержкой x64 инструкций. На эту систему можно установить 64 разрядную Windows 8.1.
Как узнать имеет процессор 64 разрядную поддержку в Windows 7 или нет
В операционной системе Windows 7 выполните следующее:
- Щелкните правой кнопкой мыши по значку «Компьютер» (Мой компьютер) на Рабочем столе.
- В контекстном меню выберите «Свойства».
- В окне «Просмотр основных сведений о вашем компьютере» нажмите на «Индекс производительности Windows».
- В окне «Оценка и увеличение производительности компьютера» нажмите на «Отображение и печать подробных сведений о производительности компьютера и системе».
- В открывшемся окне «Счетчики и средства производительности», в разделе «Дополнительные сведения о компьютере», в параметре «Система», напротив пункта «64-разрядная поддержка», будет написано «Да» или «Нет».
На компьютере стоит 32-разрядная операционная система, процессор поддерживает 64 разрядные ОС. Этот компьютер поддерживает переход на Windows 7 64-bit.
Плюсы и минусы перехода на 64 разрядную Windows
- Использование всего объема оперативной памяти (более 4 ГБ), установленной на компьютере
- Более высокая скорость работы системы и программ
- Потребление системой и приложениями большего объема оперативной памяти
- Отсутствие x64 драйверов для устаревшего оборудования
Как перейти с 32 бит на 64 битную Windows
- Скачайте на компьютер операционную систему Windows, 64 битной разрядности. Прочитайте здесь, откуда можно скачать оригинальный образ Windows 10, Windows1, Windows 7.
- Создайте загрузочную флешку или запишите образ системы на DVD диск.
- Включите компьютер, перед загрузкой системы, войдите в BIOS (UEFI), выберите для загрузки загрузочный носитель с Windows.
- Установите операционную систему на компьютер.
- После завершения установки системы, установите необходимые драйвера.
- В одном из окон установки необходимо выбрать подходящую редакцию Windows подходящей разрядности (сейчас распространены мультиобразы Windows, включающие в одном образе системы разные редакции, разной разрядности)
- В окне «Выбор типа установки» следует выбрать «Выборочная: только установка Windows (для опытных пользователей)» в Windows 10 или в Windows1, или «Полная установка (дополнительные параметры) в Windows 7
Заключение
Существует возможность поменять 32 разрядную операционную систему на 64 разрядную Windows, в пределах одной редакции. Для успешного перехода на компьютере должен быть установлен процессор, поддерживающий инструкции x64, достаточный объем оперативной памяти.
Оригинал записи и комментарии на LiveInternet.ru
Источник: spayte.livejournal.com