Win32 win64 отличия: 32-разрядная и 64-разрядная версия Windows: вопросы и ответы

64 или 18 446 744 073 709 551 616. Сравнение ~ 4 миллиардов байтов (около 4 гигабайт) с ~ 18 квинтиллионными байтами (около 18 миллиардов гигабайт или 16 эксабайт) показывает огромную разницу.

Windows 32 или 64

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

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

Есть два основных места, где вы заметите разницу между 32-битным и 64-битным в Windows. Во-первых, 32-разрядная версия Windows может использовать до 4 ГБ ОЗУ (или меньше). Таким образом, если у вас 16 ГБ ОЗУ на вашем компьютере, но он работает под управлением 32-битной Windows, он фактически не будет использовать более 4 ГБ.

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

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

Обратите внимание, что в Windows 32-разрядная версия называется x86, а 64-разрядная — x64.

Программы 32-bit или 64-bit

Когда вы устанавливаете программное обеспечение, оно зависит от поставщика, получаете ли вы 32-разрядную или 64-разрядную версию. Некоторые разработчики предоставляют только 32-разрядную версию, иногда они позволяют вам выбирать, а третьи автоматически устанавливают нужную версию для вас.64 чего должно хватить на несколько поколений вперед. На x86 — до 16 ГБ, с PAE.
Еще там были изменения в работе с селекторами и т.д., но это уже не интересно.
Появилась возможность работы с RIP напрямую. Т.е. относительная адресация относительно RIP (Instruction Pointer). В результате можно писать код не привязанный к адресу загрузки. Внешнее проявление для x64 для одного и того же кода — таблица relocation уменьшилась в несколько раз по сравнению с Win32 версией.

Теперь о Win64 (будь то Windows XP 64, Windows 2003 64 bit edition или Vista 64):
a) Изменена система работы с per-thread exception’ами.
Раньше все делалось через SEH — по адресу fs:[0] лежит указатель на голову списка обработчиков exception’ов. Первым элементом в списке находится базовый обработчик, который показывает окошко «Приложение допустило ошибку и будет закрыто». Или типа того.
Установка handler’ов делается при входе в функцию, элемент создается в стеке (там два поля — адрес обработчика и next) и указатель на элемент записывается в fs:[0]. Соответственно при глубокой рекурсии, длина списка обработчиков exception’ов будет равна глубине рекурсии.
Теперь посмотрим что происходит когда обрабатывается exception:
1. Обработчик решил «обработать» exception
1.1. Нужно сделать stack unwinding, а именно — откатить стек к исходному состоянию (к стек фрейму обработчика)
1.2. Для С++ вызвать деструкторы всех объектов созданных на стеке.
В х86 этим занимается код приложения — система дергает обработчики по цепочке с флагом unwind и те, соответственно откатывают свой стек.

В Win64 не сильно думали и перенесли код из версии винды для Itanium (а туда из версии для Alpha).
Идея состоит в следующем:
1. В каждом (!) запускаемом/загружаемом модуле (EXE/DLL) содержится специальная табличка. Табличка содержит смещения и длину всех функций внутри данного модуля, а так же набор неких п-кодов нужных для «размотки» стека.
2. Когда происходит exception, система смотрит где он произошел и ищет структурку из таблички отвечающую за эту функцию.
3. Используя п-код отматывает стек и вызывает exception handler, который представляет само приложение (адрес записан в той же структурке), что бы тот дергнул деструкторы локальных объектов
4. По цепочке отматывает до нужного фрейма

В результате:
1. Накладных расходов в runtime на включение exception handling для х64 проектов нет, тем более что exception структурки для х64 должны создаваться _всегда_.
2. Если exception произошел в функции, для которой нет структуры (ошибка компилятора собравшего программу, например) — приложение падает с ошибкой. Помочь может только SetUnhandledExceptionHandler(). Не имеет значения где упало — в своем приложении или в third party DLL, падает всегда приложение.

b) Приложения Win32 работают под эмулятором.
Идеология эмулятора переехала из Itanium версии, разве что ее переписали под реалии x64, который умеет запускать x86 код нативно.
Например некоторое время не было «нормального» метода для вин32 приложений для перебора DLL’ек внутри Win64 процесса.
Эмулятор работает в user mode и относительно «бесплатен». Во всяком случае нет тяжелых операций переключения из ring 3 в ring 0, кроме как для исполнения самих системных вызовов.
Если перебрать DLL для x86 процесса, будут видны только системные DLL нужные для работы эмулятора.

c) Изменили call convention. STDCALL no more.
4 первых параметра передаются через регистры. Остальные через стек. Стек очищает тот кто передает параметры (а-ля C calling convention).
Из приколов — хоть 4 параметра и в регистрах, но вызывающий должен зарезервировать стек, если вызываемая функция захочет их временно сохранить в стеке.

Пока вроде все чего хотел написать. Если еще чего вспомню — отдельным постом.

32 против 64 бит: какое приложение выбрать?

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

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

64 бит не всегда быстрее

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

Выбор 64-битной версии не значит, что ваша жизнь обязательно улучшится.

Яркими примерами могут послужить Internet Explorer 9, экспериментальная 64-битная версия Firefox и даже Microsoft Office, если вы применяете плагины. Google Chrome в варианте 64 Bit, наоборот, несомненно превосходит свою 32-битную версию.

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

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

Кстати: в случае с платными программами выбор 64-битной версии никак не отразится на вашем кошельке. Так, Windows 8.1 64 Bit стоит столько же, сколько и 32-битный вариант.

Тем более не стоит беспокоиться о дополнительных расходах при покупке Adobe Photoshop и Microsoft Office, поскольку и диск, и загрузочный пакет включают в себя обе версии.

Правильная разрядность программы

Windows Vista, 7, 8/8.1 Начиная Vista, Windows всегда выходит в версиях 32 и 64 бита. Как и с другими операционными системами, здесь действует следующее правило: компьютеры с 3 Гбайт ОЗУ и ниже используют 32-разрядную версию, компьютеры с 4 Гбайт памяти и выше — 64-разрядную. По цене варианты не отличаются.

Windows XP На момент выхода этой системы на рынок в октябре 2001 года компьютеров с 4 Гбайт оперативной памяти и выше практически не существовало.

Именно поэтому Windows XP изначально выпускалась только в 32-разрядной версии. Позднее компания Microsoft дополнительно создала «Windows XP Professional x64 Edition», доступную только на английском языке и конфликтующую с драйверами большинства устройств.

Такой же непригодной к использованию является и «Windows XP 64-Bit Edition», поскольку она работает только на процессорах Intel серии Itanium.

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

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

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

Internet Explorer Одним из самых крупных разочарований стала 64-разрядная версия браузера Internet Explorer 9. Устаревший движок JavaScript в таком варианте существенно замедляет просмотр веб-страниц. Поэтому Windows всегда использует 32-битную версию, а 64 Bit IE9 мы смогли найти только через поиск в меню Пуск.

В Internet Explorer 10 компания Microsoft значительно усовершенствовала 64-разрядную версию браузера, так что теперь она практически не отличается от своей 32-битного варианта.

Возможность выбора у пользователя отобрали: 32 -Bit IE можно установить только на 32-разрядных системах, а 64 Bit IE — на 64-разрядные.

Firefox Браузер от Mozilla до сих пор предлагается широкой публике только в 32-битном варианте. Небольшая команда разработчиков, однако, уже выпустила экспериментальную и потому нестабильную 64-битную версию браузера «Firefox Nightly».

Во время тестирования она разочаровала нас своими показателями, таким образом пока у нее нет никаких преимуществ.

Chrome Браузер от компании Google начиная с версии 37 распространяется и в 64-битном варианте — пусть даже и по экспериментальным каналам Dev и Canary.

Тест V8-Benchmark показал, что 64-разрядный браузер существенно превосходит классический Chrome, набирая практически втрое больше баллов.

Проблем с дополнениями не возникло. Если вы пока боитесь работать с версиями Dev и Canary, оставайтесь на 32 битах.

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

Именно поэтому вместе с Windows на 64 бита поставляется эмулятор (WOW64), позволяющий выполнять 32-разрядное ПО. Таким образом, Firefox 32 Bit без проблем запускается и в 64-битной Windows. В обратную сторону это не работает: 64-битную программу нельзя установить на 32-разрядную Windows.

Запомните общее правило: на 32-разрядных системах необходимо использовать только 32-битные программы, на 64-битных системах вы можете работать с 64-битным ПО.

Flash Эту утилиту разработки Adobe также следует устанавливать только тогда, когда другим программам без нее не обойтись.

Начиная с версии 11.3, при установке Flash Player автоматически ставятся оба варианта, если, конечно, вы работаете на 64-разрядной системе. Вы смело можете доверить эту задачу установщику.

AVG AntiVirus

Целый ряд антивирусов, в том числе и AVG, дает вам выбор между 32-битной и 64-битной версиями. В данном случае необходимо устанавливать только подходящий вашей системе вариант.

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

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

7-Zip У 64-версии нет видимых преимуществ. Из-за возможных проблем с совместимостью, однако, на 64-битных системах рекомендуем использовать все-таки вариант на 64 бита.

Media Player Classic Home Cinema Утверждение, что только 64-битный мультимедийный плеер может воспроизводить видео размером более 4 Гбайт, ложно. И все же в некоторых ситуациях 64-битная версия показывает улучшенное быстродействие. Таким образом, этот проигрыватель может стать отличной заменой программе VLC Player.

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

iTunes Музыкальный диспетчер от Apple предлагается для Mac OS только в 64-разрядном варианте, для Windows же существует и 32-битная версия. Собственно, разрядность касается только установщика — сама программа на всех системах Windows работает как 32-битное приложение. То есть при загрузке вам необходимо выбрать правильную версию, однако в итоге вы получите одну и ту же программу.

Photoshop Для профессиональной обработки изображений после запуска установщика вы можете выбрать один из вариантов. На 64-битных системах обе разрядности выбраны автоматически. Не меняйте эти настройки!

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

Ubuntu Конечно, дистрибутивы Linux совершенно отличны от Windows, но и здесь действует то же правило: если в вашем ПК три и менее гигабайт памяти, используйте 32-битную версию, если же  четыре и выше — устанавливайте 64-разрядный вариант, чтобы использовать оперативную память на полную катушку.

ProduKey Эта бесплатная утилита считывает ваши серийные коды для Windows и Office. Несмотря на простую задачу, программа также существует в двух версиях.

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

Что установить: Windows 32-bit или 64-bit

Краткое содержание

Сравнение производительности 32-битных х86 и 64-битных х64 версий Windows, а также насколько нужны 4 Гб оперативной памяти.


Небольшая теоретическая часть по 32- и 64-битным вычислениям

Различные редакции Windows уже сравнивались на данном сайте в материале: Сравнение производительности Windows XP, Windows Vista и Windows 7. Что лучше установить?. Здесь же речь пойдет о сравнении 32-битных и 64-битных версий Windows.

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

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

Думаю, не нужно лишний раз напоминать, что процессоры являют собой черезвычайно сложные устройства. Они построены из огромного числа различных блоков. Это и кэш-память различных уровней, это и блоки выборки и декодирования команд, это и блоки предсказания переходов, это и несколько типов вычислительных блоков. Некоторые современные процессоры включают в себя контроллер памяти, контроллер шины PCI-Express и даже графическое ядро. В контектсте данной статьи нас интересуют блоки вычислительные блоки. О них сейчас и поговорим.

Таких блоков в процессоре может быть несколько типов. Одни занимаются вычислениями с целыми числами, другие занимаются операциями с вещественными числами или числами с плавающей запятой. Также есть блоки для так называемых сложных инструкций. Рассмотрим для примера блоки, которые занимаются целочисленными вычислениями или просто ALU. В процессе работы этим блокам надо где-то хранить промежуточные значения. Таким временным хранилищем выступают так называемые регистры. От обычной и кеш памяти они отличаются в первую очередь минимальными задержками и невероятно высокой скоростью работы. Именно в этих регистрах и кроется основное отличие так называемых 32-bit и 64-bit процессоров. Объясню этот момент поподробней.

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

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

Важное замечание: прирост производительности можно получить только при работе в рамках 64-битного набора инструкций х86-64. Также нужно отметить, что кроме блока целочисленных вычислений ALU, процессор содержит еще и блок вычислений с плавающей точкой или как его еще называют FPU. Он содержит более объемные 80-битные регистры и использует свой набор инструкций х87. Также в процессоре есть другие блоки и другие регистры. К таковым относятся, например, SSE-регистры. Они имеют длину в 128 бит.

Если вы внимательно читали предыдущие абзацы, то могли заметить, что там упоминался некий 64-битный режим работы. У внимательного читателя мог возникнуть вопрос: а разве есть и другие режимы? Да, 64-битный процессор также поддерживает так называемый режим совместимости. В этом режиме дополнительные 8 регистров просто отключаются и 64-битный процессор ведет себя полностью как 32-битный. Это нужно в первую очередь для совместимости системного программного обеспечения и программ, которые не умеют работать с 64-битным процессором. Вот поэтому его и назвали режимом совместимости.

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

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

С разрядностью регистров связана еще одна гораздо более насущная проблема. Она заключается в ограничении адресного пространства для памяти. Грубо говоря, процессор может адресовать всего 4 Гб адресного пространства. Казалось бы, что вот как раз в ноутбуке 4Гб оперативной памяти, система должна видеть все 4Гб. На практике не все так просто. Дело в том, что кроме оперативной памяти, есть еще и память видеокарты, есть буферы различных устройств, ну и BIOS может для того же видеоядра выделить еще часть памяти. В итоге доступная пользователю память уменьшается с 4Гб до 2.5-3.5 Гб. Здесь речь не идет о той или иной операционной системе, это принципиальное ограничение. Наверное, многие из вас, мои уважаемые читатели, с ним уже сталкивались. Рассмотрим эту проблему более детально.

Здесь на самом деле все просто. Дело в том, что в регистрах хранятся не только данные, но и так называемые указатели адресов. В случае с 32-битным процессором объем этого самого регистра ограничен 32 битами. Вот отсюда и ограничение в 4 Гб или 2 в 32 степени байт.

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

Важное замечание: здесь стоит отметить, что для 32-битных операционных систем есть механизм, который позволяет использовать больше 4Гб адресного пространства. Называется он PAE или Physical Address Extension в данном случае система может адресовать до 64 Гб памяти. Данная технология изначально разрабатывалась для серверных систем. Для нормальной работы она требует соответствующих исправленных драйверов. Поскольку таковых рабочих драйверов мало, то ее даже на серверных ОС по умолчанию отключают. На обычных редакциях Windows ее тоже отключили по умолчанию. Это сделано по тем же причинам. Сейчас же находятся так называемые «народные умельцы», которые ее включают, система действительно видит всю доступную оперативную память, но вот начинают появляться ошибки в самых неожиданных местах. Диагностировать такого рода ошибки очень сложно. Так что мой вам совет. Если нужно использовать больше 3-4 Гб оперативной памяти, то ставьте 64-битную операционную систему.

Как видите, 64-битный режим работы имеет такие плюсы и минусы:

  • + 64-битная система может работать со всем объемом оперативной памяти;
  • + некоторые операции на 64-битном процессоре выполняются существенно быстрее;
  • — 64-битные указатели требуют больше памяти. Это увеличивает объем занимаемой приложениями оперативной памяти.

Как видите, не все так однозначно. Рассмотрим теперь как же это проявляется на практике.

Сравнение производительности 32-bit и 64-bit версий Windows

Сначала нужно сказать пару слов о методике тестирования.

Измерения проводились на ноутбуке Asus N61Vn с четырехьядерным процессором Intel Core 2 Quad Q9000, в качестве видеокарты применялась nVidia GeForce GT 240M с 1 Гб выделенной памяти. Важно отметить, что на ноутбуке было установлено 4 Гб оперативной памяти DDR3-1066. Сравнение проводилось с использованием 32- и 64-битных версий Windows Vista SP2 с последними обновлениями. Версии драйверов использовались одни и те же для нивелирования разницы в производительности между разными версиями. По описанным выше причинам на 32-битной Windows было доступно около 3Гб оперативной памяти, на 64-битной редакции Windows — около 4 Гб.

Важное замечание: данное тестирование также производилось на Windows XP и Windows 7 на более слабом ноутбуке Acer Timeline 3810T с одноядерным процессором Intel Core 2 Duo SU3500 и 4Гб оперативной памяти. Характер результатов и для этих случаев не изменился и остался примерно таким же.

Сравнение производительности можно разделить на две основные части:

  1. Исследование производительности обычных 32-битных программ на 32-битной и 64-битной редакции Windows;
  2. Измерение скорости работы 32-битной и 64-битной версии программ на соответствующей редакции Windows.

Исследование производительности прикладных 32-битных программ.

Целью данного тестирования является определение какой прирост производительности можно ожидать при переходе с 32-битной на 64-битную редакцию Windows. Актуальность данного исследования связана с тем, что на данный момент многие игры и программы не имеют специальных оптимизированных 64-битных версий. Здесь необходимо также напомнить, что 32-битная система работает с 3 Гб памяти, а 64-битная — с 4 Гб.

Для сравнения производительности использовались такие приложения:

  1. 3DMark03 3.6;
  2. 3DMark05 1.3;
  3. 3DMark06 1.1;
  4. PCMark05 1.2.

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

1. Результаты сравнения производительности в 3DMark03

Настройки приложения по умолчанию. Разрешение экрана 1024х768:

2. Результаты сравнения производительности в 3DMark05

Настройки установлены по умолчанию. Разрешение экрана 1024х768:

3. Результаты сравнения производительности в 3DMark06

Настройки как всегда по умолчанию. Разрешение экрана составляет 1280х720:

3. Результаты сравнения производительности в PCMark05

Данный тест включает несколько отдельных тестов. Вот результаты по-отдельности.

Общий результат в PCMark05

Производительность процессора в тестовом пакете PCMark05

Производительность памяти в тесте PCMark05

Дополнительный гигабайт оперативной памяти у 64-битной системы делает свое дело.

Производительность графики в тесте PCMark05

Производительность винчестера в PCMark05

Итоги сравнения производительности обычных приложений

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

Данное сравнение производительности также показало, что реальной пользы от 4 гигабайт оперативной памяти в том наборе приложений нет. Тут важно заметить, что на самом деле в тяжелых приложениях вроде графических редакторов, систем автоматизированного проектирования (CAD) и прочих объем оперативной памяти играет ключевую роль. Там от дополнительных гигабайт оперативной памяти реальная польза действительно есть.

Сравнение производительности 32- и 64-битных версий программ

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

Для сравнения производительности использовались такие приложения:

  1. Архиватор 7-Zip 4.65;
  2. Тестовый пакет PCMark Vantage.

1. Тестирование с помощью архиватора 7-Zip

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

Перейдем сразу к результатам:

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

2. Тестирование с помощью тестового пакета PCMark Vantage

Тестовый пакет PCMark Vantage также представлен в 32- и 64-битной редакции. Данный тестовый пакет включает несколько тестов. Рассмотрим их по-отдельности.

Общий результат в тестовом пакете PCMark Vantage

Производительность оперативной памяти в PCMark Vantage

Скорость воспроизведения видео и TV в PCMark Vantage

Игровая производительность

Производительность воспроизведения музыки в PCMark Vantage

Сравнение производительности коммуникаций в PCMark Vantage

Сравнение производительности в офисных приложениях

Сравнение производительности жесткого диска

Как и в случае с 7-Zip, в общем 64-битная версия тестового пакета PCMark Vantage показывает более высокую производительность чем 32-битная версия на 32-битной системе. Здесь основной вклад внесли оптимизации под 64-битные процессоры, а также чуть больший объем доступной памяти: четыре гигабайта у 64-битной Windows против трех у 32-битной редакции Windows.

Подведем итоги исследования

Итоги сравнения производительности 32-битной и 64-битной редакций Windows

  • Наибольший прирост производительности в 64-битных редакциях Windows XP, Windows Vista и Windows 7 возможен лишь при условии использования оптимизированных 64-битных версий программ и игр. При работе с обычными приложениями без оптимизации под 64-бита прирост производительности не наблюдается;
  • Многие приложения и игры не показывают существенного увеличения производительности при увеличении объема доступной оперативной памяти больше 3 Гб. Исключение составляют сложные приложения для работы с изображениями, видео, системы проектирования и другие. Со временем число таких приложений будет увеличиваться. Для такого рода приложений использование 64-битной системы является более чем обоснованным.
  • Некоторые приложения на 64-битной системе работают нестабильно в силу разных причин. К счастью, таких приложений все меньше и меньше.

В качестве заключения отмечу, что какую именно редакцию Windows устанавливать решать вам. Надеюсь, данное исследование вам помогло. Также не забываем и об Сравнение производительности Windows XP, Windows Vista и Windows 7. Что лучше установить?.

Все вопросы по целесообразности установки 32-бит или 64-бит версий Windows прошу излагать в этой теме форума: Windows 32-бит или 64-бит. Что лучше установить на ноутбук?.

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

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

32, 64 или 86 битная разрядность Windows: как узнать, отличия

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

Отличия 32 и 64 бит

Главное отличие 32 битной системы — она не поддерживает оперативную память больше 4 Гб. 64-битные версии Windows поддерживают до 192 Гб оперативки. Тут есть несколько оговорок: не все материнские платы позволяют использовать такой большой объем оперативной памяти и на Home версиях Windows стоит ограничение в 16 Гб.

Иногда еще при установке ОС можно увидеть обозначения x64 и x86. x64 — это 64-разрядные версии ОС, x86 — 32-разрядные. Все современные процессоры поддерживают обе архитектуры — x64 или x86.

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

Еще одно отличие — на 32 и 64 бита часто идут отдельные версии программ. Прирост производительности у 64-битных версий программ до 20%. В то же время, при запуске 32-битных приложений на 64-битной системе наблюдается незначительное падение в 2-3% скорости работы из-за подсистемы WoW64, которая эмулирует 32-битное окружение.

Если у вас более-менее современный компьютер и оперативной памяти стоит 4 Гб или больше — смело ставьте 64-битную версию. Если оперативной памяти менее 4 Гб и не планируется расширять — ставьте 32-бита.

Как определить версию Windows

Узнать, какая сейчас стоит версия ОС можно с помощью свойств компьютера.

Правой кнопкой нажмите на «Мой компьютер» и откройте его Свойства. На Windows XP информация об операционной системе будет на вкладке «Общее», на Windows 7, 8 и 10 окно выглядит немного по-другому, но информация о системе там есть.

Windows XP x64
Windows 7 32-бит (x86)

Как определить поддержку 64-бит процессором

Узнать, поддерживает ли процессор 64-бит можно с помощью бесплатной программы Speccy https://www.piriform.com/speccy/download.

Откройте Speccy и посмотрите информацию о центральном процессоре.

В строке «Инструкции» найдите упоминание 64-бит. Например, если там встречается:

  • Intel 64,
  • x64,
  • AA-64,
  • AMD 64,
  • EM64T.

Значит ваш процессор поддерживает 64-битные команды. Даже некоторые процессоры с архитектурой x86 умеют понимать 64-битные команды.

Еще один способ без установки программ — узнайте название своего процессора (например в Диспетчере устройств, его можно открыть нажав Win+R и введя команду devmgmt.msc) и поищите его спецификацию через поисковик: архитектуру и набор команд.

Как перейти с 32 на 64 битную ОС

Если вы обнаружили, что у вас стоит более 4 Гб оперативки или хотите расширить её, можно обновить систему. Для этого скачайте образ установки Windows и сделайте загрузочную флешку, или запустите установку через Daemon Tools.

Запустите установщик ОС и при выборе настроек установки, чтобы сохранить старые данные выбирайте пункты:

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

64-битная Windows — это очень просто / Хабр

Перевод поста piers7 «64 Bit Explained».

Послушайте, в этом правда нет ничего сложного.

Все программы находятся там же, в %ProgramFiles%, кроме случаев, когда вам требуется 32-битная версия, которая находится в %ProgramFiles(x86)%, за исключением ситуаций, когда дело касается 32-битной машины, и в этом случае они по-прежнему в %ProgramFiles%.

Все эти библиотеки, DLL, по-прежнему находятся в %SystemRoot%\System32, просто теперь они 64-битные. Ну а 32-битные, они вот, в %SystemRoot%\SysWOW64. Вы ещё следите за объяснением? Да, а 16-битные всё так же хранятся в %SystemRoot%\System – перемещать их в иное место было бы странным.


Данные реестра находятся в HKLM\Software, если только вы не имеете в виду данные для 32-битных программ, потому что в этом случае они в HKLM\Software\Wow6432Node.

А вообще правило очень простое: старайтесь всегда придерживаться 64-битных программ, и всё будет в шоколаде. Приложения же без 64-битных версий в любом случае малополезные, примером служат Office и Visual Studio [1]. Да, и всегда ставьте 32-битную версию Internet Explorer (она ставится по умолчанию), если вы хотите, чтобы что-нибудь из ваших дополнений работало. Ярлыки «по умолчанию» для всего прочего запускают 64-битные версии. Поскольку иметь по два ярлыка к каждой программе — не самый лучший выход, поэтому порой (cmd.exe) имеется только лишь один (64-битный), а второй вам нужно найти самостоятельно (всё там же, в SysWOW64, разумеется). Ну и конечно, не забудьте ‘Set-ExecutionPolicy RemoteSigned’ в обоих, 64- и 32-битной, версиях PowerShell.

Далее, всегда устанавливайте 64-битные версии драйверов и прочей фигни, кроме случаев, когда её нет (MSDORA, JET), или же вам требуются и 32-битная, и 64-битная версии (например, чтобы использовать MO / SqlCmd из 32-битного процесса, как MSBuild). Просто не следует делать этого, если 64-битный установщик уже установил 32-битную версию (как, например, Sql Native Client).

В общем, всё с ‘32’ в названии предназначено для 64 бит. Всё с ‘64’ — для 32 бит. Кроме, конечно, %ProgramW6432%, который является каталогом ProgramFiles для 64-битных программ в любом случае (ну, кроме как разве на 32-битной машине). Да, а .net-фреймворк фактически никуда не перемещался, просто у него рядом есть Framework64.

Ну то есть я вообще не понимаю, из-за чего люди так волнуются по поводу этого всего.

[1] Да, есть 64-битная версия Office 2010, но поскольку инсталлятор в целом не сообщает о ней, это неважно.

Введение в 64 бита на Windows

64-битные (или, что тоже самое: 64-разрядные) числа, адреса памяти или другие структуры данных — это данные, размер которых не более 64 бит. Соответственно, 64-разрядный процессор (CPU) — это процессор, который основан на/оперирует с данными (регистры, адреса) этого размера, позволяя производить прямые действия с числами этого размера (однако внешние шины данных и адресации могут иметь и иную размерность). 64-битные CPU существовали в суперкомпьютерах ещё в 70-х годах прошлого века. Но в сегменте персональных компьютеров (который до этого был 32-разрядным) они были представлены только в 2003-м году с появлением x86-64 (AMD64).

В большинстве процессоров для адресации данных в памяти могут использоваться только целочисленные (Integer) и/или специальные адресные регистры. А другие регистры для этого использовать нельзя. Поэтому размер регистров, используемых для адресации, обычно определяет размер памяти, которую можно адресовать напрямую — даже если в процессоре есть регистры большего размера (например, вещественный сопроцессор). Большинство процессоров спроектировано так, что любой один целочисленный регистр может хранить адрес (место) любых данных в виртуальной памяти (т.е. любой целочисленный регистр — это адресный регистр). Поэтому суммарное количество возможных адресов в виртуальной памяти (суммарный размер данных, которые компьютер может хранить в своём рабочем пространстве) определяется размером этих регистров. 32-битный адресный регистр означает что может быть адресовано 232 адресов или 4 Гб памяти. Когда зарождалась эта архитектура, 4 Гб памяти было намного больше типичных в то время размеров устанавливаемой оперативной памяти (4 Мб), поэтому считалось, что этого более чем достаточно для адресации. Ещё одной причиной, почему 4.29 миллиардов адресов рассматривались как подходящий размер для работы: 4.29 миллиардов чисел было достаточно, чтобы присвоить уникальный номер каждой записи в базах данных тех времён.

Большинство современных 64-разрядных процессоров имеют искусственное ограничение на размер памяти, который они могут адресовать — значительно меньший, чем вы можете ожидать от 64 битов. Например, архитектура AMD64 сейчас имеет ограничение в 52 бита на физическую память и поддерживает только 48-ми битное виртуальное адресное пространство. Это 4 Пб (петабайта) и 256 Тб (терабайт) соответственно. Это позволяет иметь достаточно места в обозримом будущем, не платя полную цену за обработку 64-битных адресов полностью.

Аналогичным образом, некоторые 64-разрядные операционные системы Windows имеют искусственные ограничения на размеры памяти, существенно ниже теоретически возможных. Это связано с тем, что разработчики ОС не хотят утверждать, что их продукт сможет работать на конфигурации, которую они не тестировали — поэтому максимальный размер памяти равен самому большому размеру памяти, который удалось протестировать к моменту выпуска ОС. Однако, реальное ограничение может быть ещё ниже из-за редакции ОС. К примеру, Windows 7 Starter поддерживает только 2 Гб оперативной памяти (да, это ограничение 64-разрядной версии). Вот табличка с параметрами систем. Я также рекомендую почитать этот цикл статей (по ссылке — последняя статья из серии, просто там в начале указано полное оглавление).

Помимо увеличенной возможности адресации 64-разрядные процессоры предлагают новые вычислительные возможности в виде новых регистров и команд. Также накладываются дополнительные ограничения и соглашения. К примеру, рассматривая x86-64: математический сопроцессор считается устаревшим. Его использование не поощряется, хотя и технически возможно. Вместо сопроцессора можно использовать 64-разрядные регистры или SSE. Имеются более строгие требования к выравниванию данных. Особенно на стеке. Модель вызова — только одна. Ключевые слова типа stdcall, register и т.п. игнорируются. По этим трём причинам (сопроцессор, выравнивание + передача вещественных чисел в SSE-регистрах), Extended (10 байт, родной для мат-сопроцессора) в мире x64 становится очень уж неудобным. Возможно, он будет как-то изменён в грядущей Delphi x64 (либо приравняют к Double или Single, как это делает Free Pascal, либо пометят как deprecated, либо оставят как есть, но работа с ним может быть не оптимальной). x86-64 даёт вам 16 64-разрядных регистров и 16 128-ми разрядных XMM-регистров (для вещественных чисел). Для сравнения: у x86-32 есть только 8 32-разрядных регистров (если я правильно сосчитал), остальное — это сопроцессор (8 80-битных регистра) и расширения. Т.е. x86-64 практически удваивает набор регистров, разве что регистры для вещественных чисел имеют уменьшенную до Double размерность. Напомню, сам сопроцессор никуда не уходит, но его использование не поощряется. Сопроцессор также не участвует в единственной для x64 модели вызова.

Переход от 32-битной к 64-битной архитектуре является фундаментальным изменением, потому что большинство операционных систем должны быть специально изменены для использования преимуществ новой архитектуры. Стороннее программное обеспечение также должно быть изменено, чтобы воспользоваться новыми возможностями; уже написанные программы поддерживаются либо режимом обратной совместимости в железе (когда один и тот же процессор может выполнять и 64-разрядные и 32-разрядные команды), либо реализацией 32-разрядного ядра процессора рядом с 64-разрядным, либо слоем программной эмуляции. В Windows для x86/x86-64 имеет место первый вариант. При этом самой большой проблемой являются драйвера. Если обычные приложения могут спокойно работать, используя подсистему WOW64, то драйвер обязан работать в родном для системе режиме. Т.е. 32-разрядный драйвер не сможет работать в 64-разрядной системе.

Когда нужно ставить 32-разрядную или 64-разрядную ОС? Простой ответ может выглядеть так:
если у вас 4 Гб оперативной памяти и более — то ставить надо 64-разрядную. В противном случае — 32-разрядную. Подробный ответ: всё не совсем так просто. Во-первых, в 32-разрядной системе вам не удастся воспользоваться всеми 4 Гб памяти — реальная цифра будет около 3 Гб (плюс-минус). Происходит это по той причине, что часть пространства резервируется под различные нужды. С другой стороны, на новых процессорах есть Physical Address Extension (PAE), которое даёт вам поддержку 64 Гб памяти — даже в 32-разрядном режиме. Но воспользоваться им вы сможете только на серверных Windows при условии, что все установленные драйвера поддерживают этот режим. Более подробно про PAE написано в этом цикле статей, а также в уже упоминавшемся выше цикле статей от Марка Руссиновича. Кроме того, нужно учитывать и обратную совместимость. Если у вас в машине есть очень старая железка, под которую нет 64-разрядного драйвера — использовать её вы не сможете: придётся ставить 32-разрядную ОС. К счастью, это скорее исключение, чем правило.

Верите вы или нет, но большей части разработчиков не нужна 64-разрядность. Зачем? Их 32-разрядные приложения и так отлично работают. В конце концов, обратная совместимость — конёк Microsoft. Давайте посмотрим, кому реально нужен x64:

  • Логика программы требует ворочать огромными объёмами данных в памяти.
  • Совместимость кода:
    • Кто пишет плагины/расширения для Проводника и других программ.
    • Хуки.
    • Кто работает в команде и пишет DLL, которую грузит x64 exe, писанный в VS.
  • И… всё.

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

Казалось бы, совместимость с 64-разрядным кодом — некая «вещь в себе», но когда к тебе подходит коллега (пишущий на MS VS) и говорит: «Слушай, что за дела? У заказчика все машины 64-битные, весь наш софт 64-битный — но почему ты делаешь 32-разрядные DLL?» и вам приходится отвечать: «Ну, Delphi не умеет делать 64-разрядные DLL» — надо видеть его глаза.

Вторая большая причина — плагины. В том числе и расширения Проводника.

Для всех остальных переход на x64 — только лишняя головная боль, которая не принесёт им ничего, кроме чувства идеальности (да! теперь наш продукт работает в родном режиме на x64!). Более того, это лишь ухудшит их ситуацию: теперь им нужно поддерживать и распространять две версии продукта, вместо одной (которая, напомню, отлично работает и так).

Главным недостатком 64-битной архитектуры является то, что одни и те же данные (и код) будут занимать больше места в памяти и на диске (из-за увеличения размера указателей, других аналогичных типов и выравнивания). Это увеличивает размер необходимой процессу памяти, частично гася работу кэша. Кроме того, 64-разрядное приложение не будет работать в 32-разрядном окружении, поэтому, как я уже указал выше, вам придётся делать две версии своей программы — что означает удвоенное поле для тестирования и поддержки. Поскольку преимущества 64-разрядного режима (работа с очень большими объёмами данных) выгодны только очень ограниченному количеству приложений (типа серверов БД), то мы можем ожидать очень медленный переход на 64-разрядные системы. Конечно, когда-нибудь в будущем 90% всех домашних компьютеров будут иметь 64-разрядные возможности — и написание 32-разрядных программ станет не выгодно.

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

Примечание 2017 года: уже сегодня даже самые дешёвые неттопы поддерживают архитектуру AMD64 и не меньше 8 Гб памяти. Иными словами, 32-разрядные машины уже больше не выпускаются. И если вы программируете не на Delphi, то уже нет большого смысла писать 32-разрядный код, чтобы он работал через прослойку эмуляции со всеми её подводными камнями. Если вы программируете на Delphi, то… ну, скажем так, 64-разрядный компилятор — не самая вылизанная часть Delphi.

Просуммируем сказанное здесь в табличке (преимущество/недостаток рассматривается в сравнении с соседней моделью):

32-разрядные приложения или архитектура64-разрядные приложения или архитектура
ПреимуществаНедостаткиПреимуществаНедостатки
Приложения работают в любой системе.Приложения работают только в 64-разрядной системе. Вам придётся делать 32-разрядный вариант, чтобы ваше приложение работало в большинстве современных систем.
Приложения имеют меньший размер и требуют меньше ресурсов (памяти) для работы.Размер и требования приложений слегка увеличены за счёт удвоения размера адресов и выравнивания.
32-разрядная DLL может быть загружена в 32-разрядный процесс.32-разрядная DLL НЕ может быть загружена в 64-разрядный процесс.64-разрядная DLL может быть загружена в 64-разрядный процесс.64-разрядная DLL НЕ может быть загружена в 32-разрядный процесс.
Приложение не получает бонуса с выполнения на 64-разрядной системе.Приложение может воспользоваться новыми регистрами процессора.
Сложно работать с большими объёмами памяти. Вам нужно использовать какой-нибудь механизм частичной загрузки/выгрузки. Например, AWE, проецируемые частями файлы или подходящий алгоритм обработки по частям.У приложения есть доступ к 8 Тб адресного пространства.
Работа с 64-разрядными числами возможна, но по частям.Работа с 64-разрядными числами напрямую.
Родной поддержки для 128-разрядных чисел нет.Возможна работа с 128-разрядными числами, но по частям (не ясно, будет ли такая поддержка в компиляторе Delphi).

Историческая справка
Процесс одной размерности может загрузить только модуль той же размерности. Это применимо к 16-, 32- и 64-разрядным процессам и модулям. Вот почему в 64-разрядной системе вы часто видите два варианта данных: один вариант — для 64-разрядных процессов, другой вариант — для 32-разрядных процессов («Program Files» vs «Program Files (x86)», «System32» vs «SysWOW64»).

Однако, при переходе от Win16 к Win32 всё обстояло несколько иначе. Не было двух вариантов кода, а просто использовались переходники от 16-ти разрядным к 32-разрядным модулям. С помощью процесса, известного как generic thunks, 16-ти битная программа может загрузить 32-битную DLL и вызвать её. Windows 95 и слой эмуляции 16-ти битных Windows в Windows NT сильно зависят от generic thunks, так что им не нужно иметь две версии кода (как это имеет место быть для 32- и 64-разрядного кода). Вместо этого, 16-ти битная версия просто использует 32-битную версию через «переходник».

32-разрядный процесс всё ещё не может загрузить 16-ти разрядную DLL — но он может загрузить 32-разрядный переходник, который имеет тот же интерфейс, что и 16-ти разрядная DLL. Переходник загружает 16-ти разрядный код (не как DLL, а как блок кода), каждый вызов переводит 32-разрядные параметры в 16-ти разрядные и передаёт управление на 16-ти разрядный код. После его отработки, переходник транслирует результаты обратно в 32-разрядный формат и возвращает управление. Аналогичный процесс возможен и в обратную сторону.

WOW (также известный как WOW32) предоставляет специальные функции (в обе стороны), которыми может воспользоваться переходник. Всё это приводит к видимости, что 16-ти разрядный код загружается и используется 32-разрядным. При переходе с 32 на 64 такого механизма не предусмотрено.

Каждое приложение и каждая операционная система имеют абстрактную модель данных. Многие приложения не говорят явно об этой модели, но модель данных управляет тем, как написан код приложения. В 32-разрядной программной модели на Windows (известной как модель ILP32) Integer, LongInt и Pointer были размером в 32 бита. Большинство разработчиков использовало эту модель даже не осознавая этого. За всю историю Win32 это допущение было корректным (хотя и не безопасным).

Историческая справка
Классическая модель данных языка Pascal при переходе от 16- к 32-разрядной архитектуре выглядела так: в языке есть фундаментальные типы данных: ShortInt, SmallInt, LongInt, Int64 (и их беззнаковые эквиваленты), которые всегда имеют фиксированную размерность (8/16/32/64 бита соответственно) и не зависят от целевой платформы. И есть обобщённый тип данных: Integer (и его беззнаковый эквивалент Cardinal), который равен родному для целевой платформы типу. Т.е. Integer = SmallInt на Win16 и Integer = LongInt на Win32. Предполагалось, что Integer будет равен Int64 на Win64.

Но при переходе на Win64 все эти допущения оказываются не рабочими. Посмотрите на эту табличку существующих на сегодня моделей данных 64-разрядной архитектуры:

64-битные модели данных
Модель
данных
SmallInt/
Word
LongInt/
LongWord
Integer/
Cardinal
Int64/
UInt64
PointerПример операционной системы с этой моделью
LLP641632326464Microsoft Windows (X64/IA-64)
LP641664326464Большинство Unix и Unix-like систем, типа Solaris, Linux, and macOS и, конечно же, Android и iOS
ILP641664646464HAL Computer Systems порт Solaris на SPARC64
SILP646464646464Unicos

При этом в Delphi уже сейчас введены два новых типа: NativeInt и NativeUInt. В 32-разрядном коде эти два типа эквивалентны Integer и Cardinal соответственно. Справка говорит нам, что эти два типа всегда будут равны по размеру в байтах типу Pointer.
Многие задают вопрос: почему в Win64 Integer остался 32-разрядным? Зачем нужно было вводить новый тип NativeInt?

Основная ошибка в рассуждениях — вы привыкли к одному, довольно странному процессору x86-32. Где, во-первых, целочисленные регистры общего назначения являются одновременно и адресными (это далеко не так у многих процессоров). Во-вторых (и следовательно), размер целочисленных регистров равен размеру адресных. Это опять же не так у других процессоров. У Крей-1, к примеру, регистры общего назначения являются 64-битными (грубо говоря, SizeOf(Integer) = 8), но адресует память он только на 24 бита (грубо говоря, SizeOf(Pointer) = 3).

Теперь понятно, что модель классического Pascal, в которой есть только «просто целочисленный тип» (Integer) и «указатель» (Pointer) — не жизненноспособна как кроссплатформенная модель данных? Вам нужно иметь два обобщённых целочисленных типа. Один — общего назначения (Integer), второй — равный по размеру указателю (NativeInt). Просто так уж совпало, что в x86-16 и x86-32 эти два разных типа были эквивалентны, поэтому в язык Pascal не добавляли отдельный тип вроде NativeInt. Но в x86-64 (и на некоторых других платформах) эти два разных типа уже не равны друг другу. И если раньше мы обходились без NativeInt, то теперь уже никак. Integer и Cardinal — по прежнему процессорно-зависимые. Надо просто понимать, что размер целочисленного типа в процессоре не всегда совпадает с разрядностью указателя.

Окей. Стало понятно, почему появился NativeInt. Но пока открыт вопрос, почему же Integer не стал 64-разрядным? Почему в Windows применяется модель LLP64?

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

Во-первых, размер Integer в 32 бита диктует сам процессор (аппаратная часть). Посмотрите на такой код:

Y := X;
Y := Y + 5;

Где X и Y объявлены как Integer. В 16-битном Pascal-е (x86-16) это выглядело так:

Y := X; 
// 89C1           mov cx,ax
Y := Y + 5;
// 83C105         add cx,$05

Здесь идёт работа с двух-байтовыми числами (16 бит).

Когда произошёл переход 16 -> 32, этот же ассемблерный код стал (на x86-32):

Y := X; 
// 89C1           mov ecx,eax
Y := Y + 5;
// 83C105         add ecx,$05

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

Однако, когда произошёл переход 32 -> 64, родной для процессора целочисленный тип не изменился:

Y := X; 
// 89C1           mov ecx,eax
Y := Y + 5;
// 83C105         add ecx,$05

Внезапно, ровно этот же машинный код на x86-64 работает с 32-битными, а вовсе не с 64-битными числами. Чтобы явно указать, что мы работаем с 64-битным расширением, нужно к каждой команде добавлять специальный префикс REX:

Y := X; 
// 4889C1           mov rcx,rax
Y := Y + 5;
// 4883C105         add rcx,$05

С другой стороны, если команда по своей природе оперирует указателем (например, CALL), то префикс REX указывать не нужно. Иными словами, родной для процессора целочисленный тип не изменил своей разрядности в x64, оставшись 32-битным, а указатель поменял разрядность с 32 до 64 бит.

Ещё пример: при расширении 32-разрядного числа до 64-разрядного на x86-64 — старшая часть регистра не обнуляется. Опять же, в отличие от расширения 16-разрядного числа до 32-разрядного на x86-32.

Именно поэтому, для x86-64 самым родным и эффективным является 32-разрядный Integer, а вовсе не 64-разрядный Int64. Почему? Ну потому что в AMD64 64-разрядный режим (long mode) — это простая надстройка над существующим 32-разрядным режимом (protected mode). Это большой плюс к обратной совместимости кода, что и привело к тому, что AMD64 выжила на рынке. Не зря Intel назвала свою реализацию AMD64 «IA-32e» (хотя потом они переименовали её в «EMT64»; «IA-64» же — это был Itanium, это вообще не x86).

Во-вторых, практика показала, что большинству программ даже сегодня не нужна работа с 64-разрядными числами — они прекрасно обойдутся и 32-разрядными. Увеличение размерности до 64 бит было бы пустой тратой места, потому что это не нужно большинству приложений. Да, некоторым приложениям нужно оперировать с данными большого размера, но это необходимо только для специальных узких случаев. Как вы можете видеть, две наиболее популярные модели (LLP64 и LP64) используют именно 32-разрядный Integer. Так что если вы используете Integer как «просто целочисленный тип, удобный для процессора» — вы в порядке.

В-третьих, изначально приложения, которые работают на 64-битной Windows, будут получаться портированием 32-разрядных приложений Windows. Цель состоит в том, что один и тот же исходник, будучи написан аккуратно, должен работать как в 32-х, так и в 64-разрядном окружении. Определение модели данных само по себе не делает эту задачу проще. Но гарантия, что модель данных влияет только на размер указателя, является только первым шагом. Второй шаг — определить набор новых типов данных, которые позволят разработчику автоматически менять размеры данных, связанных с указателями. Это позволит вам иметь целочисленный тип данных, который меняет свой размер вместе со сменой размера указателя от 32 до 64 бит. Базовые типы данных останутся размером 32 бита, поэтому вам не нужно будет производить никаких изменений уже написанного кода, работающим с файлами на диске, передачей по сети или IPC. Это значительно сузит объём работ, необходимых для портирования ваших приложений на 64-битные Windows.

Наконец, есть и причина обратной совместимости: неисчислимое количество кода уже написано в предположении, что размер Integer и LongInt не изменится.

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

Заметьте, что определение Integer как типа, зависящего от целевой платформы всё ещё не нарушено. Просто в x86-64 он оказался равен LongInt. Ну, бывает.

Заметьте, что программная модель — это выбор на базе компилятора, так что в одной ОС могут сосуществовать разные модели данных. Хотя модель, выбранная самой ОС, обычно доминирует по понятным причинам.

Конвертация приложения для 64-битной архитектуры может варьироваться по сложности. В идеальной ситуации вы сможете просто перекомпилировать приложение и оно будет работать. В запущенных случаях вам придётся делать много работы. Основная проблема при переходе — программист посчитал, что некий тип данных совпадёт по размеру (в байтах) с указателем. И это допущение выполнялось на 32-битной машине, но может быть нарушено на 64-битной.

Наиболее вероятно, что будущая 64-разрядная версия Delphi возьмёт модель LLP64 — как взяла её Windows и как следует ей Free Pascal. Поэтому все Integer и LongInt останутся 32-разрядными.

Обновление 2017 года: как мы можем видеть из справки, для Win64 Delphi взяла именно модель LLP64.

Уже сейчас Delphi имеет новые типы данных, которые выглядят намного логичнее старых (ну-ка, не подглядывая в справку: сколько байт занимает SmallInt? А ShortInt?): Int8, Int16, Int32, Int64, NativeInt (и их беззнаковые аналоги: UInt8, UInt16, UInt32, UInt64 и NativeUInt). Типы с цифрами имеют (надеюсь) очевидную размерность, а NativeInt/NativeUInt равен размеру Pointer в байтах. Достаточно очевидно и прозрачно. Integer всё ещё является типом, размерность которого зависит от платформы, но никто не говорил, что его размерность равна размерности указателя. Integer — это просто общий целочисленный тип. В частности поэтому Integer равен 16/32/32 на Win16/Win32/Win64.

Давайте приведём табличку, суммирующую сказанное для целочисленных типов данных:

Целочисленные типы данных в Delphi
ТипЗнаковый?Размер в
Win16
Размер в
Win32
Размер в
Win64
ПсевдонимыЦель/назначение
PointerX163264Указатель
NativeInt+163264Ошибка природы
(знаковый целочисленный тип, совместимый с указателем)
NativeUInt163264Беззнаковый целочисленный тип, совместимый с указателем)
Int+163232IntegerЗнаковый целочисленный тип общего назначения
UInt163232CardinalБеззнаковый целочисленный тип общего назначения
Int8+888ShortIntЗнаковый целочисленный тип размером 8 бита
UInt8888ByteБеззнаковый целочисленный тип размером 8 бит
Int16+161616SmallIntЗнаковый целочисленный тип размером 16 бит
UInt16161616WordБеззнаковый целочисленный тип размером 16 бит
Int32+323232LongIntЗнаковый целочисленный тип размером 32 бита
UInt32323232LongWordБеззнаковый целочисленный тип размером 32 бита
Int64+X6464Знаковый целочисленный тип размером 64 бита
UInt64X6464Беззнаковый целочисленный тип размером 64 бита

Заметьте, что псевдонимы указаны именно для Windows (Win16, Win32, Win64). К примеру, Android и iOS используют модель LP64, где LongInt и LongWord имеют размер 64 бита. Если в Delphi появится поддержка 64-битных Android и/или iOS, то наиболее вероятно, что Delphi также будет использовать модель LP64, т.е. LongInt и LongWord станут восьмибайтовыми.

Примечание 2017 года: как мы можем видеть из справки, Delphi взяла модель LP64 для 64-битной iOS.

Итак, что же со всем этим делать? Ну, вам нужно следовать нескольким простым правилам:

  • Если вам нужна целочисленная переменная для общих целей (счётчик цикла, например) — берите Integer.
  • Если вам нужна целочисленная переменная строго фиксированного размера (например, для записи в файл, отправке по сети или другому приложению через IPC) — берите (U)IntX (предпочтительно) или любой фундаментальный тип — LongInt, SmallInt и т.п. (сильно менее предпочтительно, особенно на Android/iOS, но хотя бы привычнее). Однозначно не используйте для этого обобщённые типы Integer или Cardinal.
  • Если вам нужен тип для «Pointer-like» данных — берите NativeUInt.
  • Никогда не используйте NativeInt.
  • По возможности не используйте ShortInt, Byte, SmallInt, Word, LongInt и LongWord.
  • Вам нужно внимательнее относится к типам данным. Например, тип Integer больше не взаимозаменяем с HWND или THandle в Win64.

Остаётся только согласовать код в местах прикосновения разных типов.

Примечание
В Delphi крайне неудачно выбрано имя нового типа (NativeInt). Во-первых, префикс «native» намекает на то, что этот тип — «родной» для процессора и что его нужно использовать всегда. Что, мягко говоря, далеко от истины. «Родной и удобный» целочисленный тип — это Integer. Во-вторых, в некоторых старых версиях Delphi (я затрудняюсь назвать версии; думаю, что где-то в районе Delphi 7) тип с именем NativeInt уже был. Вот только его размер был… 8 байт — что явно не равно положенным 4 байтам для 32-разрядного компилятора. В-третьих, сама по себе концепция «знаковый целочисленный тип эквивалентный указателю» уже заметно попахивает. Указатель не может быть отрицательным. Иными словами, вместо двух типов NativeInt и NativeUInt в Delphi следовало бы добавить только один тип PtrUInt (чего, увы, не произошло).

Вероятно, позднее Embarcadero опубликует какое-нибудь руководство по переходу на Win64, как она сделала это для Unicode.

Что делать, если вы писали свой код в расчёте на то, что Integer станет равен Int64, а LongInt останется 32-битным? Иными словами, вы думали, что переход на 64 будет совершаться так же, как и переход на 32. А действовать надо ровно так же: вы находите все места использования 64-разрядных чисел и меняете тип с Integer на NativeInt. С другой стороны, вы могли бы сделать простой Search&Replace по исходному коду: Integer -> NativeInt. Да, это будет работать, но надо понимать, что тогда ваша программа будет везде оперировать с 64-разрядными числами (вы ведь использовали Integer как «просто целочисленный тип, удобный для процессора», не так ли?), что, как мы узнали, является не самым эффективным действием на x86-64.

Ну и, напоследок, несколько фактов:

  • 64-разрядное приложение использует формат PE, так что размер exe-файла не может превышать 2 Гб.
  • SizeOf(THandle/HWND/HMODULE/Hxxxx) = SizeOf(Pointer) = 8. Поэтому вот так будет неправильно: Value := Integer(Handle).
  • Свойства вроде Tag (вероятнее всего) станут типа NativeInt.
  • Пожалуй, единственными 32-разрядными приложениями, которые получают какие-то бонусы с их выполнения на 64-разрядной системе, являются приложения, помеченные флагом LARGEADDRESSAWARE. На 32-разрядной системе таким приложениям дадут только (максимум) 3 Гб, а вот на 64-разрядной системе в их распоряжении будут все 4 Гб.

См. также:

Стандарты кодирования

— Почему программное обеспечение использует имя Win32?

Win32 — это обычное имя Windows API. Этот API определяет, как приложения могут взаимодействовать с операционной системой. Он примерно сопоставим со стандартом POSIX для Unix, но Win32 также охватывает графический интерфейс и многие другие функции.

API Win32 не ограничивается 32-разрядными установками Windows.

Из Центра разработчиков Windows:

Интерфейс прикладного программирования Windows (API) позволяет разрабатывать настольные и серверные приложения, которые успешно работают во всех версиях Windows, используя преимущества функций и возможностей, уникальных для каждой версии.

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

Примечание. Ранее это называлось Win32 API. Название Windows API более точно отражает его корни в 16-битной Windows и его поддержку в 64-битной Windows.

Вам не нужно использовать Win32 API для разработки для Windows. Альтернативой являются классы .NET или интерфейс Windows RT.

Технически существует вариант Win64. Но от Win32 он отличается в основном моделью данных (размером указателей). Это не отдельный набор API:

Среда Win64 API почти такая же, как среда Win32 API — в отличие от значительного перехода от Win16 к Win32. API-интерфейсы Win32 и Win64 теперь объединены и называются Windows API.Используя Windows API, вы можете скомпилировать один и тот же исходный код для работы в 32-битной или 64-битной Windows. Чтобы перенести приложение на 64-битную Windows, просто перекомпилируйте код.

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

Поскольку Win64 существенно не отличается, вы почти никогда не увидите проекты, нацеленные на win64 на уровне исходного кода, хотя более новые проекты могут нацеливаться на winapi вместо традиционного win32 .Но для всех практических целей все эти имена относятся к одному и тому же API.

Разница между 64-битной и 32-битной Windows

В чем разница между 32-битной и 64-битной операционными системами Windows? Термины 32-разрядный и 64-разрядный относятся к способу обработки информации процессором или ЦП компьютера. 64-разрядная версия Windows 10/8/7 обрабатывает большие объемы оперативной памяти или ОЗУ более эффективно, чем 32-разрядная система.

Узнайте, работает ли на вашем компьютере 32-разрядная или 64-разрядная версия Windows.

  • Откройте систему, нажав кнопку «Пуск», щелкнув правой кнопкой мыши «Компьютер» и выбрав «Свойства».
  • В разделе «Система» вы можете просмотреть тип системы.

Преимущества использования 64-разрядной операционной системы наиболее очевидны, когда на вашем компьютере установлен большой объем оперативной памяти (ОЗУ), обычно 4 ГБ ОЗУ или более. в то время как максимальный предел ОЗУ для 32-разрядных выпусков Windows 7 составляет 4 ГБ, когда дело доходит до 64-разрядных выпусков, объем памяти, который может адресовать ОС, может составлять до 192 ГБ или даже 512 ГБ. Таким образом, вы сможете определить, работает ли компьютер под управлением 32-разрядной или 64-разрядной версии Windows 10.

Чтение: каков максимальный предел памяти (ОЗУ) для 64-битной Windows.

Узнайте, поддерживает ли ваш процессор 64-разрядную версию Windows.

Откройте «Информация о производительности и инструменты», нажав кнопку «Пуск», а затем — «Панель управления». В поле поиска введите Информация о производительности и инструменты, а затем в списке результатов щелкните Информация о производительности и инструменты.

  • В Windows 10/8/7 щелкните Просмотреть и распечатать подробную информацию о производительности и системе.
  • В Windows Vista щелкните Просмотр и печать сведений.

В разделе «Система» вы можете увидеть, какой тип операционной системы вы используете в настоящее время в разделе «Тип системы», и можете ли вы запустить 64-разрядную версию Windows с поддержкой 64-разрядной версии. Если на вашем компьютере уже установлена ​​64-разрядная версия Windows, вы не увидите список с поддержкой 64-разрядной версии.

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

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

Чтение: Как определить, является ли приложение 64-битным или 32-битным.

Разница между 32-битной и 64-битной Windows

Основные различия между 32-битными версиями Windows 10/8/7 и 64-битными версиями Windows 10/8/7 связаны с доступностью памяти, управлением памятью , и улучшенные функции безопасности.Функции безопасности, доступные в 64-разрядных версиях Windows, включают следующее:

  • Защита ядра от исправлений
  • Поддержка аппаратной защиты выполнения данных (DEP)
  • Обязательная подпись драйвера
  • Удаление поддержки 32- битовые драйверы
  • Удаление 16-битной подсистемы

Преимущества 64-битной Windows перед 32-битной Windows

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

Зачем использовать 64-битную Windows?

Недостатки 64-битной Windows перед 32-битной Windows.

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

Надеемся, этот пост окажется для вас полезным.

32-битные и 64-битные данные приложений в реестре — приложения Win32

  • 2 минуты на чтение

В этой статье

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

Родителем каждого 64-битного узла реестра является узел, зависящий от образа, или ISN. Перенаправитель реестра прозрачно направляет доступ реестра приложения к соответствующему подузлу ISN. Подузлы перенаправления в дереве реестра создаются автоматически компонентом WOW64 с именем Wow6432Node. В результате важно не называть создаваемый вами ключ реестра как Wow6432Node.

Флаги KEY_WOW64_64KEY и KEY_WOW64_32KEY обеспечивают явный доступ к 64-разрядному представлению реестра и 32-разрядному представлению соответственно.Дополнительные сведения см. В разделе Доступ к альтернативному представлению реестра.

Чтобы отключить и включить отражение реестра для определенного ключа, используйте функции RegDisableReflectionKey и RegEnableReflectionKey. Приложения должны отключать отражение только для ключей реестра, которые они создают, и не пытаться отключить отражение для предопределенных ключей, таких как HKEY_LOCAL_MACHINE или HKEY_CURRENT_USER. Чтобы определить, какие ключи находятся в списке отражения, используйте функцию RegQueryReflectionKey.

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

отражение реестра

32-бит vs.64-разрядная версия и почему это важно


Последнее обновление 27 февраля 2020 г.

Скорее всего, вы используете 64-разрядную / 64-разрядную операционную систему, приложение или ЦП — и даже не подозреваете об этом.

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

Чтобы продолжать использовать свои любимые 32-разрядные приложения в macOS Catalina, разработчикам программного обеспечения необходимо обновить программное обеспечение для поддержки 64-разрядных версий. Если разработчик программного обеспечения решит не делать этого, пользователи могут использовать виртуальную машину с Parallels Desktop для запуска своих любимых приложений на своем Mac.

Что такое бит?

Согласно определению Lifewire, бит — это сокращение от двоичной цифры.С точки зрения непрофессионала, здесь вы видите единицы измерения, относящиеся к единицам и нулям, и они могут применяться к компьютерным сетям или памяти. Иногда вы видите форматирование как «32-битное» или «x32». Эти два формата представляют собой одно и то же.

32-битные и 64-битные операционные системы

32-разрядный процессор был самым популярным процессором, используемым компьютерами до начала 1990-х годов. Процессоры Intel Pentium и AMD были 32-разрядными, что означает, что Microsoft Windows 95, 98 и XP являются 32-разрядными операционными системами.Однако небольшой сдвиг произошел в 2003 году, когда Microsoft выпустила 64-битную версию Windows, а затем в 2005 году переместила внутренний процессор на 64-битный процессор AMD.

Microsoft Windows, использующая более мощный процессор в сочетании с более мощной операционной системой, раскрыла большой потенциал с улучшенной безопасностью, лучшей производительностью игры и возможностью выделять больше памяти по мере необходимости. Почему это важно? Каждый персональный компьютер (будь то Mac® или ПК) имеет 32-битную или 64-битную ОС, и это определяет удобство работы пользователя.Используемая ОС и программное обеспечение являются основой нашей продуктивности.

Разница между 32-битными и 64-битными процессорами

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

Самым популярным среди потребителей упоминание процессора x64 в ЦП или аппаратном обеспечении является Nintendo 64. Отсюда и название. Лично я всегда думал, что это произошло из-за того, что на Nintendo 64 было выпущено 64 игры (ха-ха).Нет, это из-за процессора. Кроме того, из популярной статьи HowStuffWorks я узнал, что этот конкретный процессор представляет собой специализированную систему микросхем, получившую название 64-битной R4300i «Reality Engine». (Вставьте сюда oooh и ahhhhh.)

В чем разница между 32-битным и 64-битным программным обеспечением?

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

Самый большой и простой способ ответить, в чем разница между программным обеспечением 32x и 64x, состоит в том, что версия 64x будет более безопасной и надежной.

Как проверить, является ли приложение macOS 32-разрядным или 64-разрядным

Если вы используете macOS® Mojave, довольно легко увидеть, является ли какое-либо приложение на вашем Mac 32- или 64-разрядным. Следуйте по этому пути:

Меню Apple> Об этом Mac> Системный отчет

В системном отчете перейдите к «Программное обеспечение»> «Приложения»> «Выберите нужное приложение».

В зависимости от приложений на вашем Mac вы можете видеть в основном 64-битные, некоторые 32-битные или все 32-битные.Это полностью зависит от ваших личных настроек.

Как запустить старые 32-разрядные операционные системы и приложения на Mac

Запускать на Mac старые 32-разрядные операционные системы или программное обеспечение быстро и легко. С Parallels Desktop® для Mac вы можете виртуализировать любую 32-битную операционную систему на виртуальной машине и запустить необходимое приложение. 32-битные операционные системы могут быть MacOS или Windows. Например, так выглядит 32-разрядная виртуальная машина macOS в Parallels Desktop:

Запуск виртуальной машины macOS на macOS с Parallels Desktop может показаться немного избыточным, но это абсолютно необходимо для пользователей, которым нужны более старые 32-разрядные операционные системы или приложения.Разработчикам также необходимо кодировать, тестировать и развертывать, не покупая вторичные машины.

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

Почему в 64-битной операционной системе есть папка system32?

Причина: для обеспечения обратной совместимости

Что такое обратная совместимость?
Обратная совместимость — это термин, используемый для описания программного или аппаратного обеспечения, совместимого с предыдущими версиями программного обеспечения или операционных систем.Без обратной совместимости программа, работающая с одним процессором компьютера или операционной системой, перестанет работать с новой версией. 32-разрядная версия медиаплеера VLC может без проблем работать в 64-разрядной операционной системе Windows, или компьютерная игра, разработанная для Windows XP, может без проблем запускаться в Windows 10, все благодаря обратной совместимости.

Но как 64-разрядная ОС Windows обеспечивает обратную совместимость?
Microsoft гарантирует, что как 32-битные (x86), так и 64-битные (x64) приложения могут работать в 64-битных операционных системах Windows.Когда 32-битная программа запускается в 64-битной Windows, 32-битный эмулятор будет вызываться для обработки 32-битной программы. Эмулятор заставит 32-битное приложение думать, что оно работает в 32-битной Windows, и те же функции, которые доступны в 32-битной Windows, также будут доступны для программы в 64-битной Windows.

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

Папка Разрядность Описание
System32 64 Системная папка Windows (системный каталог) для 64-битные файлы
SysWow64 32 Системная папка Widows (системный каталог) для 32-битных файлов
Program Files 64 Папка для 64-битных программных файлов
Program Files (x86) 32 Папка для 32-разрядных программных файлов

Теперь возникает вопрос, почему папка, в которой хранятся двоичные файлы, необходимые для 64-разрядных приложений, называется System32, и почему Microsoft решила назвать папку, содержит файлы, необходимые 32-разрядным приложениям «SysWOW64» (Windows в Windows 64)?

Что ж, это, конечно, кажется нелогичным, но этому есть объяснение.Это связано с совместимостью. Первоначально Microsoft намеревалась переименовать папку, но решила не делать этого, потому что многие разработчики жестко указали путь к системной папке в исходном коде своих приложений. Они включили «System32» в путь к папке. И для сохранения совместимости, если приложение преобразовано в 64-битный код, 64-битная системная папка по-прежнему будет называться System32.

Но как насчет 32-битных приложений, у которых системный путь жестко запрограммирован и которые работают в 64-битной Windows? Вы можете подумать, как им найти новую папку SysWOW64 без изменения программного кода.Ответ заключается в том, что эмулятор прозрачно перенаправляет вызовы в папку System32 в папку SysWOW64, поэтому, даже если папка жестко закодирована в папку System32 (например, C: \ Windows \ System32), эмулятор будет следить за тем, чтобы вместо нее использовалась папка SysWOW64. . Таким образом, тот же исходный код, который содержит путь с включенной папкой System32, может быть скомпилирован как в 32-битный, так и в 64-битный программный код без каких-либо изменений.

Подводя итог, Microsoft хотела избавиться от имени System32 для этой папки, но не сделала этого, иначе все 64-разрядные версии Windows (начиная с Windows 7) не смогли бы запускать огромную часть приложений и видео. игры.

Вниманию читателя! Не прекращайте учиться сейчас. Освойте все важные концепции DSA с помощью самостоятельного курса DSA по приемлемой для студентов цене и будьте готовы к работе в отрасли.

Win32 / Win64

WoW64 (32-разрядная версия Windows в 64-разрядной версии Windows) — это подсистема операционной системы Windows, способная запускать 32-разрядные приложения, и она включена во все 64-разрядные версии Windows, включая Windows XP Professional x64 Edition, IA-64. и x64 версии Windows Server 2003, а также 64-битные версии Windows Vista, Windows Server 2008, Windows 7 и Windows 8.В Windows Server 2008 R2 Server Core это необязательный компонент.

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

Библиотеки переводов

Подсистема WoW64 включает облегченный уровень совместимости, который имеет аналогичные интерфейсы во всех 64-битных версиях Windows. Он направлен на создание 32-разрядной среды, которая предоставляет интерфейсы, необходимые для запуска неизмененных 32-разрядных приложений Windows в 64-разрядной системе.Технически WoW64 реализован с использованием трех библиотек динамической компоновки (DLL):

  1. Wow64.dll, основной интерфейс ядра Windows NT, который выполняет преобразование между 32-разрядными и 64-разрядными вызовами, включая манипуляции с указателями и стеком вызовов
  2. Wow64win.dll, который обеспечивает соответствующие точки входа для 32-разрядных приложений
  3. Wow64cpu.dll, который заботится о переключении процессора из 32-битного в 64-битный режим

Реестр и файловая система

Подсистема WoW64 также обрабатывает другие ключевые аспекты запуска 32-разрядных приложений.Он участвует в управлении взаимодействием 32-битных приложений с такими компонентами Windows, как реестр, который имеет отдельные ключи для 64-битных и 32-битных приложений. Например, HKEY_LOCAL_MACHINE \ Software \ Wow6432Node — это 32-разрядный эквивалент HKEY_LOCAL_MACHINE \ Software (хотя 32-разрядные приложения не знают об этом перенаправлении). Некоторые ключи реестра отображены из 64-битных в их 32-битные эквиваленты, в то время как у других их содержимое зеркально отражается, в зависимости от выпуска Windows.

Операционная система использует каталог% SystemRoot% \ system32 для своей 64-разрядной библиотеки и исполняемых файлов. Это сделано по причинам обратной совместимости, поскольку многие устаревшие приложения жестко запрограммированы для использования этого пути. При выполнении 32-битных приложений WoW64 прозрачно перенаправляет 32-битные библиотеки DLL в% SystemRoot% \ SysWoW64, который содержит 32-битные библиотеки и исполняемые файлы. 32-битные приложения обычно не знают, что они работают в 64-битной операционной системе. 32-разрядные приложения могут получить доступ к% SystemRoot% \ System32 через псевдокаталог% SystemRoot% \ sysnative.

Имеется два каталога Program Files, видимые как для 32-разрядных, так и для 64-разрядных приложений. Каталог, в котором хранятся 32-битные файлы, называется Program Files (x86), чтобы различать их, в то время как 64-битный сохраняет традиционное имя Program Files без каких-либо дополнительных квалификаторов.

Несовместимые приложения

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

Папка SysWOW64, расположенная в папке Windows на диске ОС, содержит несколько приложений для поддержки 32-битных приложений (например, cmd.exe, полезный для регистрации 32-битных служб Windows, odbcad32.exe, для регистрации соединений ODBC для 32-битных приложений). 16-битные унаследованные приложения для MS-DOS и ранних версий Windows обычно несовместимы с 64-битными версиями Windows Vista, 7 и 8, но могут быть запущены в 16-битной или 32-битной ОС Windows через Microsoft Virtual PC или DOSBox.С другой стороны, 32-разрядные версии Windows XP, Vista, 7 и 8 обычно могут запускать 16-разрядные приложения практически без проблем.

Компонент, который делает это возможным, Windows в 32-битной Windows, заменен в 64-битных ОС Windows на WoW64, что делает почти все 16-битные приложения невыполнимыми.

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

Объяснение 32-битной и 64-битной систем | Бесплатное ПО Gizmo

Будет ли это 32-битное программное обеспечение работать в моей 64-битной операционной системе?

или
Будет ли это 64-разрядное программное обеспечение работать на моем компьютере?

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

32-битное против 64-битного

Больше бит обычно лучше

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

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

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

32-битная Windows

Еще в 1995 году Windows 95 представила 32-разрядную поддержку. Это было желательно, потому что он мог адресовать (указывать на) 4 гигабайта (ГБ) памяти. Тогда это было много, но сейчас, в 2017 году, средний новый ПК имеет как минимум 4 ГБ оперативной памяти, а для многих из нас этого просто недостаточно.

64-битная Windows

Ограничение в 4 ГБ для 32-разрядных систем сегодня намного больше, чем когда в 1999 году была выпущена первая 64-разрядная Windows. Сегодня существует множество приложений, которым для выполнения своих задач требуется более 4 ГБ памяти. И у многих пользователей теперь есть файлы размером более 4 ГБ. Видео и игры — наиболее очевидные большие файлы, но можно найти даже текстовые файлы размером 4 ГБ.

Переход с 32-битной на 64-битную

Есть проблема: хотя процессоры, которые мы покупаем, почти все 64-битные, большая часть доступного сегодня программного обеспечения по-прежнему 32-битная.Так почему же переход такой медленный?

Основная проблема связана с нормальным процессом разработки компьютерных систем. Есть три основных компонента: сначала проектируется компьютерное оборудование, разрабатываются соответствующие операционные системы (ОС), а затем появляются прикладные программы.

При первом переходе с 16-битной на 32-битную в 1985 году оборудование было готово, но потребовалось 10 лет, чтобы получить 32-битную операционную систему в Windows 95.

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

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

Ваша компьютерная система из трех частей

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

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

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

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

Какие 32-битные и 64-битные комбинации совместимы и будут работать вместе?

Здесь мы переходим к практическим вопросам и можем начать отвечать на общие вопросы.

Общее правило заключается в том, что 32-разрядная версия будет работать на 64-разрядном компоненте более низкого уровня, но 64-разрядная версия не будет работать на 32-разрядном компоненте более низкого уровня:

  • 32-битная ОС будет работать на 32-битном или 64-битном процессоре без каких-либо проблем.
  • 32-битное приложение будет работать в 32-битной или 64-битной ОС без каких-либо проблем.
  • Но 64-битное приложение будет работать только в 64-битной ОС, а 64-битная ОС будет работать только на 64-битном процессоре.

Эти две таблицы иллюстрируют одно и то же правило:

Таблица 1 — Что совместимо, если у меня 32-разрядный процессор?
Процессор (CPU) 32-битный 32-битный 32-битный 32-битный
Операционная система (ОС) 32-битный 32-битный 64-разрядная версия 64-разрядная версия
Прикладная программа 32-битный 64-разрядная версия 32-битный 64-разрядная версия
Да Нет Нет Нет
Таблица 2 — Что совместимо, если у меня 64-битный процессор?
Процессор (CPU) 64-разрядная версия 64-разрядная версия 64-разрядная версия 64-разрядная версия
Операционная система (ОС) 64-разрядная версия 64-разрядная версия 32-битный 32-битный
Прикладная программа 64-разрядная версия 32-битный 32-битный 64-разрядная версия
Да Да Да Нет

Основная причина того, что 32-разрядная версия всегда будет работать на 64-разрядной, заключается в том, что 64-разрядные компоненты были разработаны для такой работы.Таким образом, новые 64-битные системы обратно совместимы с 32-битными системами (что является основной причиной, по которой большинство из нас не перешло на 64-битное программное обеспечение).

Пример обратной совместимости — 64-разрядная версия Windows. У него есть программное обеспечение под названием WOW64, которое обеспечивает совместимость путем эмуляции 32-битной системы. См. Статью Как Windows 7 / Vista 64 поддерживает 32-разрядные приложения, если вы хотите узнать больше. В этой статье сделан один важный момент: невозможно установить 32-разрядный драйвер устройства в 64-разрядной операционной системе.Это связано с тем, что драйверы устройств работают параллельно с операционной системой. Эмуляция выполняется на уровне операционной системы, поэтому она доступна для более высокого уровня, приложения, но недоступна для драйвера устройства, который работает на том же уровне, то есть на уровне операционной системы.

Аппаратная виртуализация — исключение из правила

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

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

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

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

Таблица 3 — Что совместимо, если у меня 32-разрядный ЦП и программная виртуализация?
Процессор (CPU) 32-битный 32-битный 32-битный 32-битный
Операционная система хоста 32-битный 32-битный 32-битный 32-битный
Гостевая операционная система 32-битный 32-битный 64-разрядная версия 64-разрядная версия
Прикладная программа 32-битный 64-разрядная версия 32-битный 64-разрядная версия
Да Нет Нет Нет
Таблица 4 — Что совместимо, если у меня 64-битный ЦП и программная виртуализация?
Процессор (CPU) 64-разрядная версия 64-разрядная версия 64-разрядная версия 64-разрядная версия
Операционная система хоста 32/64-бит 32/64-бит 32/64-бит 32/64-бит
Гостевая операционная система 64-разрядная версия 64-разрядная версия 32-битный 32-битный
Прикладная программа 64-разрядная версия 32-битный 32-битный 64-разрядная версия
Да Да Да Нет

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

Эмуляция 64-битного процессора не вариант

Во всех возможных конфигурациях, которые мы рассмотрели до сих пор, на процессорах (ЦП) выполняется программное обеспечение, использующее набор команд, свойственный этому процессору. Запуск 64-битного программного обеспечения на 32-битном процессоре не работает, потому что 64-битные инструкции не являются собственными для 32-битного процессора. Но что, если бы я мог эмулировать 64-битный процессор с помощью 32-битного программного обеспечения?

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

Кроме того, насколько я понимаю, процессоры x86 (32-разрядные), используемые на ПК и Apple Mac, не могут полностью эмулировать набор инструкций x64 (64-разрядных). Некоторые 64-битные инструкции не могут быть перехвачены эмулятором.Это приводит к сбою системы, когда процессор x86 пытается выполнить эти инструкции x64.

Ответы на распространенные вопросы о 32-битных и 64-битных системах

Будет ли 64-битный процессор запускать 32-битную программу в 64-битной версии ОС?

Да, будет. 64-битные системы обратно совместимы со своими 32-битными аналогами.

Будет ли 64-битная ОС запускать 32-битное приложение на 64-битном процессоре?

Да, будет. Опять же, это из-за обратной совместимости.

Могут ли 64-битные приложения содержать 32-битный код?

Да, часто 64-битное программное обеспечение будет содержать части 32-битного кода.

Точно так же 32-битное программное обеспечение (обычно очень старые программы) может иметь 16-битный код, поэтому эти 32-битные приложения обычно не работают должным образом в 64-битной ОС.

Могут ли 16-битные приложения или код работать в 64-битных системах?

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

Может ли 64-разрядный ЦП с 32-разрядной ОС хоста запускать виртуальную машину (ВМ) для 64-разрядной гостевой ОС?

Да. Все зависит от уровня виртуализации.

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

Аппаратная виртуализация должна поддерживаться ЦП (например, с Intel-VT или AMD-V) и BIOS.

Ответы на распространенные вопросы о 32- и 64-битной Windows

Могу ли я запустить Windows (2000, XP, Vista, 7, 8/8.1 или 10) на 64-битном процессоре и использовать старое программное обеспечение?

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

Действует ли лицензионный ключ Windows как для 32-битной, так и для 64-битной версий?

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

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

Как узнать, 64-разрядная ли моя система?

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

Я рекомендую вам скачать SecurAble от Gibson Research Corporation (GRC), которая расскажет вам, есть ли у вас 64-битный процессор с полезными функциями аппаратного DEP и аппаратной виртуализации.

Будут ли мои старые драйверы устройств работать в Windows 64-bit

Вы должны обновить свою статью, чтобы объяснить, что для запуска 64-битной версии Windows вам потребуются * все * 64-битные драйверы (подписанные драйверы для Vista и Windows 7, по большей части), и причина 64-разрядные версии Windows не будут запускать 16-разрядный код, потому что Microsoft решила отказаться от поддержки 16-разрядных (Windows 3.x) программ с его 64-битной ОС (поскольку они будут поддерживать 32-битные программы через эмуляцию «Windows-on-Windows» (WOW). До сих пор у меня почти не было проблем с 64-битной Windows 7, за исключением для некоторых частей устаревшего оборудования (веб-камера и старый USB-сканер 1998 года), которые не поддерживаются (без драйверов). — См. дополнительную информацию по адресу: http://www.techsupportalert.com/content/32-bit-and -64-бит-объяснил.htm / …

Многие драйверы устройств, которые работают в 32-разрядной версии Windows, не работают в 64-разрядной версии Windows.

Эта проблема более подробно рассматривается в статье «Как 64-разрядная версия Windows поддерживает 32-разрядные приложения».

Как мне перенести мою 32-битную систему на 64-битную Windows?

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

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

Как запустить 32-битное программное обеспечение после установки 64-битной Windows?

64-разрядная версия Windows обеспечивает 32-разрядный режим совместимости под названием WOW64 (32-разрядная версия Windows в 64-разрядной версии Windows), который должен запускать большинство, если не все ваши приложения.Но 32-битные приложения Windows автоматически не совместимы с 64-битными Windows. Для этого есть несколько причин: у них 16-битный код, они полагаются на 32-битные драйверы устройств, это расширения, которые используют внедрение кода для добавления функций в другую программу, или они не следуют «правилам» в какой-то другой программе. способ. Некоторые поставщики предпочитают создавать собственную 64-битную версию, а не обновлять 32-битное приложение, чтобы сделать его совместимым. Дополнительные сведения об этих проблемах см. В разделе «Как 64-разрядная версия Windows поддерживает 32-разрядные приложения».

Если у вас есть 32-разрядное приложение, которое вы хотите запустить из командной строки, вам необходимо использовать версию cmd.exe для WOW64. В меню «Пуск» выберите «Выполнить» и введите следующую команду. Обратите внимание, что переменная% systemroot% указывает на вашу папку Windows, поэтому она будет работать, даже если Windows не установлена ​​на диске C:

.

% systemroot% \ SysWOW64 \ cmd.exe

 

Если ваше приложение не запускается в 64-разрядной версии Windows, попробуйте XP Mode, Windows Virtual PC или другое решение для виртуализации.Имейте в виду, что режим XP снижает безопасность вашей системы, поэтому его следует использовать в крайнем случае.

Как я могу определить, является ли мое приложение 32-битным или 64-битным?

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

  • Windows устанавливает ваши программы в следующие папки на системном диске:

    • ‘\ Program Files’ для 64-битных программ
    • ‘\ Program Files (x86)’ для 32-битных программ
  • В диспетчере задач 32-разрядные процессы обычно имеют суффикс «* 32», а 64-разрядные процессы — нет.

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

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

Вы можете, обладая необходимыми знаниями, найти информацию самостоятельно, но есть решения лучше:

  • Запустите инструмент системной информации или аудита, например один из этих инструментов в Best Free System Information Utility. Просто имейте в виду, что большинство из этих типов приложений полезны, но не являются окончательными, например СИВ, МСИНФО.
  • Если программное обеспечение запущено, вы можете использовать диспетчер задач: как показано на снимке экрана в примере, 32-разрядные процессы обычно обозначаются знаком «(32-разрядный)» рядом с именем в Windows 8 или «* 32» в Windows 7.
  • Мой любимый метод — использовать портативную программу PEStudio. Тип бита отображается на главном экране и раскрывает множество технической информации о программе, если вы хотите продолжить изучение. Это в первую очередь инструмент безопасности для выявления опасных функций программы, поэтому он также включает сканирование на вирусы с помощью VirusTotal. Если вы дождетесь, пока он завершит свой анализ, он также сообщит список поведения, которое потенциально представляет угрозу безопасности вашей системы.
  • Если вы хотите получить более подробную информацию о модулях, используемых программой, вы можете попробовать Dependency Walker, который также является частью инструментов разработки Microsoft, таких как Visual Studio и Visual C ++.Как и в случае с другим программным обеспечением, работающим под 64-битной Windows, вы получите наилучшие результаты, если запустите 32- или 64-битную версию Dependency Walker, которая соответствует приложению, которое вы хотите проверить. Помните, что 64-разрядная версия Windows ограничивает доступ к соответствующим 32-разрядным или 64-разрядным частям реестра.
  • Можно использовать инструмент Windows Software Development Kit (SDK) DumpBin. Если SDK установлен, запустите командную строку Windows SDK и введите следующую команду. Примеры пути к программе: «C: \ Windows \ System32 \ cmd.exe «, который является командной строкой Windows, и» C: \ Program Files (x86) \ Mozilla Firefox \ Firefox.exe «, который является 32-разрядным веб-браузером. Кавычки не нужны, если путь к программе не содержит пробелов, таких как Firefox пример ..
dumpbin / headers "путь к программе" 
  • Такие инструменты, как Microsoft Process Explorer, часто используются вместо диспетчера задач. Они предоставляют гораздо больше информации и функций. Process Explorer может отображать свойства процесса, или вы можете добавить столбец Image Type в представление процесса, как показано на снимке экрана справа..
  • Раньше я рекомендовал запускать сценарий PowerShell из раздела «Аудит 32-разрядных и 64-разрядных приложений с помощью PowerShell». Если вы еще не используете PowerShell, это будет намного сложнее. В нем перечислены все установленные приложения и их «разрядность», если они правильно зарегистрированы в реестре. Сценарий был обновлен и теперь имеет одну версию, которая работает как в 32-битной, так и в 64-битной Windows, но теперь для нее требуется PowerShell 2.0. Это не проблема, если вы используете Windows 7 или 8, но PowerShell необходимо будет загрузить, если ваша версия Windows XP или Vista.Если вы впервые используете PowerShell, следующие инструкции помогут вам начать работу.

Вы можете проверить версию, запустив PowerShell и введя в консоль следующую команду. В этом примере указана версия 4, поскольку она предоставляется в Windows 8.1 .:

PS C: \ Users \ Me> $ PSVersionTable.PSVersion

Основная малая редакция сборки
----- ----- ----- --------
4 0 -1 -1
 

Сценарии

PowerShell по умолчанию не могут запускаться, запустите консоль PowerShell от имени администратора и временно разрешите запуск сценария, введя команду «set-executionpolicy unrestricted» — вам нужно будет подтвердить, что вы хотите иметь возможность запускать сценарии.Затем вам нужно будет не забыть выключить его с помощью команды «set-executionpolicy limited»:

PS C: \ WINDOWS \ system32> неограниченная политика выполнения set
Изменение политики исполнения
Политика выполнения помогает защитить вас от скриптов, которым вы не доверяете.
Изменение политики выполнения может подвергнуть вас риску безопасности, описанному в
раздел справки about_Execution_Policies по адресу http://go.microsoft.com/fwlink/?LinkID=135170.
Вы хотите изменить политику выполнения?
[Y] Да [N] Нет [S] Приостановить [?] Справка (по умолчанию «Y»): Y
 

Для запуска скрипта разархивируйте «Get-InstalledApps.PS1.TXT «и удалите» .TXT «, чтобы Windows распознала приложение как PowerShell. Затем создайте для него ярлык и в поле» Цель ярлыка «вставьте» powershell.exe -noexit «перед путем к файлу. Вы также можете перенаправить текстовый вывод консоли в текстовый файл, добавив «> installedapps.txt». Легче просматривать файл, чем просматривать его во время потоковой передачи на дисплей.

[показать-скрыть переключатель]

В чем разница между 32-битной и 64-битной Windows?

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

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

Оборудование также ограничено дизайном. Например, в то время как 64-битные процессоры AMD и Intel используют 64-битные указатели памяти, поддерживаемые наборы микросхем в 2010 году использовали только 52-битное физическое адресное пространство (4 петабайта) и 48-битное пространство виртуальной памяти (256 терабайт).Этого более чем достаточно, потому что 64-разрядная версия Windows 7 позволяет использовать только 192 ГБ физической памяти и 16 терабайт (44 бита) виртуальной памяти.

Таблица 5: Физические и логические ограничения для версий Windows
Числа в скобках указывают на расширенные настройки, которые не являются настройками по умолчанию и требуют совместимого оборудования
Версия: 8 / 8,1 10
Биты версии: 32 64 32 64
Система:
Физические процессоры 2 2 2 2
Логические процессоры 32 256 32 256
Системный кэш 1 (2) ГБ 1,024 ГБ 1 (2) ГБ 1,024 ГБ
Физическая память 4 ГБ 2,048 ГБ 4 ГБ 2,048 ГБ
Виртуальная память 4 ГБ 16,384 ГБ 4 ГБ 16,384 ГБ
Ядро 1 (2) ГБ 8192 ГБ 1 (2) ГБ 8192 ГБ
Пользовательский процесс:
Физическая память 2 (3) ГБ 8192 ГБ 2 (3) ГБ 8192 ГБ
Виртуальная память 2 (3) ГБ 2 (8,192) ГБ 2 (3) ГБ 2 (8,192) ГБ
Таблица 5 (продолжение): Физические и логические ограничения для версий Windows
Числа в скобках указывают на расширенные настройки, которые не являются настройками по умолчанию и требуют совместимого оборудования
Версия: XP Vista 7
Биты версии: 32 64 32 64 32 64
Система:
Физические процессоры 2 2 2 2 2 2
Логические процессоры 32 64 32 64 32 256
Системный кэш 1 ГБ 1,024 ГБ 1 (2) ГБ 1,024 ГБ 1 (2) ГБ 1,024 ГБ
Физическая память 4 ГБ 128 ГБ 4 ГБ 128 ГБ 4 ГБ 192 ГБ
Виртуальная память 4 ГБ 16,384 ГБ 4 ГБ 16,384 ГБ 4 ГБ 16,384 ГБ
Ядро 1 (2) ГБ 8 ГБ 2 ГБ 8 ГБ 2 ГБ 8 ГБ
Пользовательский процесс:
Физическая память 2 (3) ГБ 2 (4) ГБ 2 (3) ГБ 8 ГБ 2 (4) ГБ 8 ГБ
Виртуальная память 2 (3) ГБ 2 (8,192) ГБ 2 (3) ГБ 2 (8,192) ГБ 2 (4) ГБ 2 (8,192) ГБ

Примечания:

  1. Ограничения памяти зависят от выпуска, поскольку домашние выпуски зачастую менее эффективны, чем выпуски Professional / Enterprise.
  2. Я использовал гигабайты (ГБ) для согласованности, хотя было бы удобно преобразовать 1024 ГБ в 1 ТБ.
  3. Я исключил первую 64-битную версию Windows XP (2002), потому что она имеет другую архитектуру. Он использовал процессоры Intel Itanium (IA-64) со встроенным процессором x86 для совместимости. На смену ей пришла 64-битная архитектура AMD (x86-64), которая расширила набор инструкций x86 и работала настолько хорошо, что была лицензирована Intel и другими производителями микросхем.Название обычно сокращается до x64, поскольку на сегодняшний день это наиболее распространенный тип 64-битных процессоров.
Могу ли я получить доступ к дополнительной памяти для программы / процесса в 32-битной Windows, как показано в Таблице 5?

Вот пример.

Если вы используете MySQL в Windows, вы можете использовать Address Windowing Extensions (AWE), который поддерживается MSQL. AWE увеличивает максимальный размер пользовательского процесса с 2 ГБ до 3 ГБ, что я указал в таблице 5 этой статьи. Это даст 50% -ное увеличение адресуемой ОЗУ для MySQL, но вы обнаружите, что это должно дать большее увеличение памяти, доступной вашему приложению MySQL.Запуск MySQL в Windows с 4 ГБ ОЗУ объясняет это более подробно.

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

Могу ли я получить доступ к более чем 4 ГБ памяти в 32-разрядной версии Windows?

Вы можете использовать расширение физического адреса (PAE) для адресации более 4 ГБ. PAE увеличивает размер адреса с 32 до 36 бит или более, чтобы вы могли использовать 64 ГБ или более.

PAE настроен в BIOS вашей системы, поэтому он может иметь значение для любой операционной системы, включая Linux и Apple OS X.

32-разрядная версия Windows использует PAE, но блокирует ограничение в 4 ГБ. Существуют утилиты, которые снимают это ограничение, но я не рекомендую использовать их, поскольку выходит за рамки Windows: говорится в «Физической памяти».