Статья раскрывает смысл термина "64 бита". В статье кратко рассмотрена история развития 64-битных систем, описаны наиболее распространенные на данный момент 64-битные процессоры архитектуры Intel 64 и 64-битная операционная система Windows.
Архитектура AMD64 (EM64T)TatyanazaxarovaВ статье кратко рассматривается архитектура AMD64 компании AMD и ее реализация EM64T компании Intel. Описаны особенности архитектуры, ее возможности, достоинства и недостатки.
Установка и настройка Windows Virtual PC (XP Mode)uaseller.org Презентации, обучение продавцов, видеоуроки, навыки продаж, все это и многое другое на сайте http://www.uaseller.org/
8 Tips for an Awesome Powerpoint Presentationݺߣs | Presentation Design AgencyThe document provides examples of standard, boring presentation templates and encourages the creation of unique, visually appealing templates instead. It emphasizes using fewer words and more images per slide, varying fonts and colors, and breaking content into multiple slides to keep audiences engaged. Inspiration sources like design blogs and galleries of infographics and slide designs are recommended for making impactful presentations that attract and impress audiences.
Особенности разработки 64-битных приложенийTatyanazaxarovaЧто же получили программисты с приходом 64-битных систем? Помимо многочисленных преимуществ, о которых написаны сотни и тысячи рекламных статей, программисты получили целый набор задачек, головоломок и даже ловушек, с которыми предстоит столкнуться всем, кто хочет получить реальные преимущества от переноса кода на 64-битные системы.
7 шагов по переносу программы на 64-битную системуTatyanazaxarovaВ статье рассмотрены основные шаги, обеспечивающие корректный перенос 32-битных Windows приложений на 64-битные Windows системы. Хотя статья ориентирована на разработчиков, использующих язык Си/Си++ в среде Visual Studio 2005/2008, она будет полезна и другим разработчикам, планирующим перенос своих приложений под 64-битные системы.
Урок 27. Особенности создания инсталляторов для 64-битного окруженияTatyanazaxarovaПри разработке 64-битной версии приложения дополнительное внимание стоит уделить и вопросу дистрибуции программы. Ведь при установке на 64-битной операционной системе есть несколько нюансов, забыв о которых можно получить неработающий инсталляционный пакет.
Забытые проблемы разработки 64-битных программTatyanazaxarovaХотя история развития 64-битных систем составляет более десятилетия, появление 64-битных версий операционной системы Windows поставило перед разработчиками новые задачи в области разработки и тестирования программных решений. В статье рассмотрены некоторые ошибки связанные с разработкой 64-битного Си/Си++ кода под операционную систему Windows. Объяснены причины, по которым данные ошибки не нашли отражения в статьях, посвященных задачам миграции и неудовлетворительно выявляются большинством статических анализаторов.
Изучение проблемы: перенос Си++ библиотек для работы с облаками точек итрианг...TatyanazaxarovaИтальянская компания E.G.S. S.r.l. занимается разработкой решений в области моделирования трехмерных объектов на базе триангулированных сеток.
СКАЛА-Р. Российская конвергентная вычислительная платформаDEPO ComputersАлександр Игнатьев, ведущий системный архитектор компании IBS, представил конвергентную вычислительную платформу СКАЛА-Р и подробно рассказал о её возможностях и областях применения.
Урок 26. Оптимизация 64-битных программTatyanazaxarovaПосле компиляции программы в 64-битном режиме она начинает потреблять большее количество памяти, чем ее 32-битный вариант. Часто это увеличение почти незаметно, но иногда потребление памяти может возрастать в 2 раза.
Урок 25. Практическое знакомство с паттернами 64-битных ошибокTatyanazaxarovaДанная статья содержит различные примеры 64-битных ошибок, собранные в демонстрационном примере PortSample. Однако, начиная с версии PVS-Studio 3.63, вместо PortSample в дистрибутив PVS-Studio включается более новая версия примеров, которая называется OmniSample. Поэтому некоторые скриншоты в статье не соответствуют актуальному состоянию дел.
7 шагов по переносу программы на 64-битную системуTatyanazaxarovaВ статье рассмотрены основные шаги, обеспечивающие корректный перенос 32-битных Windows приложений на 64-битные Windows системы. Хотя статья ориентирована на разработчиков, использующих язык Си/Си++ в среде Visual Studio 2005/2008, она будет полезна и другим разработчикам, планирующим перенос своих приложений под 64-битные системы.
Урок 27. Особенности создания инсталляторов для 64-битного окруженияTatyanazaxarovaПри разработке 64-битной версии приложения дополнительное внимание стоит уделить и вопросу дистрибуции программы. Ведь при установке на 64-битной операционной системе есть несколько нюансов, забыв о которых можно получить неработающий инсталляционный пакет.
Забытые проблемы разработки 64-битных программTatyanazaxarovaХотя история развития 64-битных систем составляет более десятилетия, появление 64-битных версий операционной системы Windows поставило перед разработчиками новые задачи в области разработки и тестирования программных решений. В статье рассмотрены некоторые ошибки связанные с разработкой 64-битного Си/Си++ кода под операционную систему Windows. Объяснены причины, по которым данные ошибки не нашли отражения в статьях, посвященных задачам миграции и неудовлетворительно выявляются большинством статических анализаторов.
Изучение проблемы: перенос Си++ библиотек для работы с облаками точек итрианг...TatyanazaxarovaИтальянская компания E.G.S. S.r.l. занимается разработкой решений в области моделирования трехмерных объектов на базе триангулированных сеток.
СКАЛА-Р. Российская конвергентная вычислительная платформаDEPO ComputersАлександр Игнатьев, ведущий системный архитектор компании IBS, представил конвергентную вычислительную платформу СКАЛА-Р и подробно рассказал о её возможностях и областях применения.
Урок 26. Оптимизация 64-битных программTatyanazaxarovaПосле компиляции программы в 64-битном режиме она начинает потреблять большее количество памяти, чем ее 32-битный вариант. Часто это увеличение почти незаметно, но иногда потребление памяти может возрастать в 2 раза.
Урок 25. Практическое знакомство с паттернами 64-битных ошибокTatyanazaxarovaДанная статья содержит различные примеры 64-битных ошибок, собранные в демонстрационном примере PortSample. Однако, начиная с версии PVS-Studio 3.63, вместо PortSample в дистрибутив PVS-Studio включается более новая версия примеров, которая называется OmniSample. Поэтому некоторые скриншоты в статье не соответствуют актуальному состоянию дел.
Урок 24. Фантомные ошибкиTatyanazaxarovaМы закончили рассмотрение паттернов 64-битных ошибок. Последнее на чем мы остановимся в связи с этими ошибками, является то, как они могут проявляться в программах.
Урок 23. Паттерн 15. Рост размеров структурTatyanazaxarovaСам по себе рост размера структур не является ошибкой, но может приводить к потреблению необоснованного количества памяти и в результате к замедлению скорости работы программы. Будем рассматривать данный паттерн не как ошибку, но как причину неэффективности 64-битного кода.
Урок 21. Паттерн 13. Выравнивание данныхTatyanazaxarovaПроцессоры работают эффективнее, когда имеют дело с правильно выровненными данными. А некоторые процессоры вообще не умеют работать с не выровненными данными.
Урок 20. Паттерн 12. ИсключенияTatyanazaxarovaГенерирование и обработка исключений с участием целочисленных типов не является хорошей практикой программирования на языке Си++. Для этих целей следует использовать более информативные типы, например классы, производные от класса std::exception.
Урок 19. Паттерн 11. Сериализация и обмен даннымиTatyanazaxarovaВажным элементом переноса программного решения на новую платформу является преемственность к существующим протоколам обмена данными. Необходимо обеспечить чтение существующих форматов проектов, осуществлять обмен данными между 32-битными и 64-битными процессами и так далее.
Урок 17. Паттерн 9. Смешанная арифметикаTatyanazaxarovaНадеемся, вы уже успели отдохнуть от 13 урока и теперь сможете рассмотреть еще один важный паттерн ошибок, связанный с арифметическими выражениями, в которых участвуют типы различной размерности.
Урок 16. Паттерн 8. Memsize-типы в объединенияхTatyanazaxarovaОсобенностью объединения (union) является то, что для всех элементов (членов) объединения выделяется одна и та же область памяти, то есть они перекрываются. Хотя доступ к этой области памяти возможен с использованием любого из элементов, элемент для этой цели должен выбираться так, чтобы полученный результат был осмысленным.
Урок 15. Паттерн 7. Упаковка указателейTatyanazaxarovaБольшое количество ошибок при миграции на 64-битные системы связано с изменением соотношения между размером указателя и размером обычных целых. В среде с моделью данных ILP32 обычные целые и указатели имеют одинаковый размер. К сожалению, 32-битный код повсеместно опирается на это предположение. Указатели часто приводятся к int, unsigned, long, DWORD и другим неподходящим типам.
Урок 13. Паттерн 5. Адресная арифметикаTatyanazaxarovaМы специально выбрали номер "тринадцать" для этого урока, поскольку ошибки, связанные с адресной арифметикой в 64-битных системах, являются наиболее коварными. Надеемся, число 13 заставит вас быть внимательнее.
Урок 11. Паттерн 3. Операции сдвигаTatyanazaxarovaЛегко сделать ошибку в коде, работающем с отдельными битами. Рассматриваемый паттерн 64-битных ошибок связан с операциями сдвига.
Урок 10. Паттерн 2. Функции с переменным количеством аргументовTatyanazaxarovaКлассическими примерами, приводимыми во многих статьях по проблемам переноса программ на 64-битные системы, является некорректное использование функций printf, scanf и их разновидностей.
Урок 9. Паттерн 1. Магические числаTatyanazaxarovaВ некачественном коде часто встречаются магические числовые константы, наличие которых опасно само по себе. При миграции кода на 64-битную платформу эти константы могут сделать код неработоспособным, если участвуют в операциях вычисления адреса, размера объектов или в битовых операциях.
Урок 8. Статический анализ для выявления 64-битных ошибокTatyanazaxarovaСтатический анализ кода - методология выявления ошибок в программном коде, основанная на просмотре программистом участков кода, помеченных статическим анализатором. Помеченные участки кода с большой вероятностью содержат ошибки определенного типа.
Урок 7. Проблемы выявления 64-битных ошибокTatyanazaxarovaСуществуют различные подходы к выявлению ошибок в программном коде. Рассмотрим основные методологии и их эффективность в выявлении 64-битных ошибок.
Урок 6. Ошибки в 64-битном кодеTatyanazaxarovaИсправление всех ошибок компиляции и предупреждений не будет означать работоспособность 64-битного приложения. И именно описанию и диагностике 64-битных ошибок будет посвящена основная часть уроков. Также не надейтесь на помощь ключа /Wp64, который многими часто без оснований преподносится при обсуждениях в форумах как чудесное средство поиска 64-битных ошибок.
Урок 5. Сборка 64-битного приложенияTatyanazaxarovaХочется сразу предупредить читателя, что невозможно всесторонне описать процесс сборки 64-битного приложения. Настройки любого проекта достаточно уникальны, поэтому к адаптации настроек для 64-битной системы всегда надо подходить внимательно. В уроке будут описаны только общие шаги, которые важны для любого проекта. Эти шаги подскажут вам с чего начать процесс.
Урок 4. Создание 64-битной конфигурацииTatyanazaxarovaВначале следует убедиться, что используемая вами редакция Visual Studio позволяет собирать 64-битный код. Если вы планируете разрабатывать 64-битные приложения с использованием последней версии (на момент написания курса) Visual Studio 2008, то следующая таблица поможет определить, какая из редакций Visual Studio вам необходима.
PVS-Studio, решение для разработки современных ресурсоемких приложенийTatyanazaxarovaИнструмент PVS-Studio
набор правил Viva64 для анализа 64-битных приложений;
набор правил VivaMP для анализа параллельных приложений;
набор правил для анализа общего назначения.
Лицензионная и ценовая политика PVS-Studio
Информация о компании ООО «СиПроВер»
PVS-Studio, решение для разработки современных ресурсоемких приложенийTatyanazaxarova
64 бита
1. 64 бита
Автор: Андрей Карпов
Дата: 17.05.2010
Аннотация
Статья раскрывает смысл термина "64 бита". В статье кратко рассмотрена история развития 64-
битных систем, описаны наиболее распространенные на данный момент 64-битные процессоры
архитектуры Intel 64 и 64-битная операционная система Windows.
Введение
В рамках архитектуры вычислительной техники под термином "64-битный" понимают 64-битные
целые и другие типы данных, имеющих размер 64 бита. Под "64-битными" системами могут
пониматься 64-битные архитектуры микропроцессоров (например, EM64T, IA-64) или 64-битные
операционные системы (например, Windows XP Professional x64 Edition). Можно говорить о
компиляторах, генерирующих 64-битный программный код.
В данной статье будут рассмотрены различные моменты, связанные с 64-битными технологиями.
Статья предназначена для программистов, желающих начать разрабатывать 64-битные
программы, и ориентирована на Windows-разработчиков, поскольку для них вопрос знакомства с
64-битными системами наиболее актуален.
История 64-битных систем
64-битность только недавно вошла в жизнь большинства пользователей и прикладных
программистов. Однако работа с 64-битными данными имеет уже длинную историю.
1961: IBM выпускает суперкомпьютер IBM 7030 Stretch, в котором используются 64-битные слова
данных, 32-битные или 64-битные машинные инструкции.
1974: Control Data Corporation запускает векторный суперкомпьютер CDC Star-100, в котором
используется архитектура 64-битных слов (предыдущие системы CDC имели 60-битную
архитектуру).
1976: Cray Research выпускает первый суперкомпьютер Cray-1, в котором реализована архитектура
64-битных слов и который послужит основой для всех последующих векторных суперкомпьютеров
Cray.
1985: Cray выпускает UNICOS - первую 64-битную реализацию операционной системы Unix.
1991: MIPS Technologies производит первый 64-битный процессор, R4000, в котором реализована
третья модификация разработанной в их компании архитектуры MIPS. Этот процессор
используется в графических рабочих станциях SGI начиная с модели IRIS Crimson. Kendall Square
Research выпускает свой первый суперкомпьютер KSR1, построенный на основе их собственной
запатентованной 64-битной архитектуры RISC под операционной системой OSF/1.
2. 1992: Digital Equipment Corporation (DEC) представляет полностью 64-битную архитектуру Alpha -
детище проекта PRISM.
1993: DEC выпускает 64-битную Unix-подобную операционную систему DEC OSF/1 AXP (позже
переименованную в Tru64 UNIX) для своих систем, построенных на архитектуре Alpha.
1994: Intel объявляет о своих планах по разработке 64-битной архитектуры IA-64 (совместно с
компанией Hewlett-Packard) - преемника их 32-битных процессоров IA-32. Дата выпуска назначена
на 1998-1999 годы. SGI выпускает IRIX 6.0 с 64-битной поддержкой чипсета R8000.
1995: Sun запускает 64-битный процессор семейства SPARC UltraSPARC. HAL Computer Systems,
подчиненная Fujitsu, запускает рабочие станции, созданные на основе 64-битного процессора
SPARC64 первого поколения, независимо разработанного компанией HAL. IBM выпускает
микропроцессоры A10 и A30, а также 64-битные процессоры PowerPC AS. IBM также выпускает 64-
битное обновление для системы AS/400, способное преобразовывать операционную систему,
базы данных и приложения.
1996: Nintendo представляет игровую консоль Nintendo 64, созданную на основе более дешевого
варианта MIPS R4000. HP выпускает реализацию 64-битной 2.0 версии собственной архитектуры
PA-RISC PA-8000.
1997: IBM запускает линейку RS64 64-битных процессоров PowerPC/PowerPC AS.
1998: Sun выпускает Solaris 7 с полной 64-битной поддержкой UltraSPARC.
1999: Intel выпускает набор команд для архитектуры IA-64. AMD публично объявляет о своем
наборе 64-битных расширений для IA-32, который был назван x86-64 (позже переименован в
AMD64).
2000: IBM выпускает свой первый 64-битный мэйнфрейм zSeries z900, совместимый с ESA/390, а
также новую операционную систему z/OS.
2001: Intel наконец запускает линейку 64-битных процессоров, которые теперь получают название
Itanium и рассчитаны на высокопроизводительные серверы. Проект не соответствует ожиданиям
из-за многочисленных задержек при выпуске IA-64 на рынок. NetBSD становится первой
операционной системой, которая запускается на процессоре Intel Itanium после его выхода. Кроме
того, Microsoft также выпускает Windows XP 64-Bit Edition для архитектуры IA-64 семейства
Itanium, хотя в ней сохраняется возможность запускать 32-битные приложения при помощи
прослойки WoW64.
2003: AMD представляет линейки процессоров Opteron и Athlon 64, созданные на основе
архитектуры AMD64, которая является первой 64-битной процессорной архитектурой, основанной
на архитектуре x86. Apple начинает использовать 64-битный процессор "G5" PowerPC 970
производства IBM. Intel утверждает, что процессорные чипы семейства Itanium останутся
единственными 64-битными процессорами, разработанными в их компании.
2004: В ответ на коммерческий успех AMD, Intel признается, что они разрабатывали клон
расширений AMD64, которому дали название IA-32e (позже переименован в EM64T, и затем еще
раз в Intel 64). Intel также выпускает обновленные версии семейств процессоров Xeon и Pentium 4
с поддержкой новых команд.
3. 2004: VIA Technologies представляет свой 64-битный процессор Isaiah.
2005: 31 января Sun выпускает Solaris 10 с поддержкой процессоров AMD64 / Intel 64. 30 апреля
Microsoft выпускает Windows XP Professional x64 Edition для процессоров AMD64 / Intel 64.
2006: Sony, IBM и Toshiba начинают выпуск 64-битного процессора Cell для PlayStation 3, серверов,
рабочих станций и других устройств. Microsoft выпускает Windows Vista с включенной 64-битной
версией для процессоров AMD64 / Intel 64, которая поддерживает 32-битную совместимость. Все
Windows-приложения и компоненты являются 64-битными, однако многие из них имеют 32-
битные версии, включенные в систему в виде плагинов в целях совместимости.
2009: Как и Windows Vista, Windows 7 компании Microsoft включает полную 64-битную версию для
процессоров AMD64 / Intel 64, и на большинство новых компьютеров по умолчанию
устанавливается 64-битная версия. Выходит операционная система компании Apple Mac OS X 10.6,
"Snow Leopard" которая имеет 64-битное ядро и предназначена для процессоров AMD64 / Intel 64,
однако по умолчанию эта система устанавливается только на некоторые из последних моделей
компьютеров компании Apple. Большинство приложений, поставляемых с Mac OS X 10.6, теперь
также являются 64-битными.
Более подробно с историей развития 64-битных систем можно познакомиться в статье Джона
Машей "Долгая дорога к 64 битам" [1] и в энциклопедической статье в Wikipedia "64-bit" [2].
Прикладное программирование и 64-битные системы
На момент написания статьи в 2010 году, наиболее известными и распространенными являются
две 64-битные архитектуры микропроцессоров: IA64 и Intel 64.
1. IA-64 64-битная микропроцессорная архитектура, разработанная совместно компаниями
Intel и Hewlett Packard. Реализована в микропроцессорах Itanium и Itanium 2. Для более
подробного знакомства с архитектурой IA-64 можно обратиться к следующим статьям в
Wikipedia: "IA-64", "Itanium", "Itanium 2". Архитектуру Itanium поддерживает большое
количество производителей серверов: Bull, Fujitsu, Fujitsu Siemens Computers, Hitachi, HP,
NEC, SGI и Unisys. Эти производители присоединились к Intel и множеству разработчиков
ПО для создания Itanium Solutions Alliance, с целью продвижения архитектуры и ускорения
темпов портирования ПО.
2. Intel 64 (AMD64 / x86-64 / x64 / EM64T) - данная архитектура представляет собой
расширение архитектуры x86 с полной обратной совместимостью. Существует множество
вариантов названия данной архитектуры, что приводит к путанице, хотя, по сути, все эти
названия обозначают одно и тоже: x86-64, AA-64, Hammer Architecture, AMD64, Yamhill
Technology, EM64T, IA-32e, Intel 64, x64. Более подробно узнать о том, как появилось так
много названий, можно в статье из Wikipedia: "X86-64". Процессоры с архитектурой Intel 64
нашли широкое распространение персональных компьютерах. И скорее всего ваш
компьютер оснащен именно процессором с данной архитектурой.
Важно понимать, что IA-64 и Intel 64 (AMD64) это совершенно разные, несовместимые друг с
другом, микропроцессорные архитектуры. Далее в статье мы будем рассматривать только
архитектуру Intel 64 (x64 / AMD64), как более популярную среди разработчиков прикладного
программного обеспечения для операционной системы Windows. Для краткости программную
модель Intel 64, доступную программисту в 64-битной системе Windows, называют Win64.
4. Архитектура Intel 64 (AMD64)
Рассматриваемая архитектура Intel 64 простое, но в то же время мощное обратно совместимое
расширение устаревшей промышленной архитектуры x86. Она добавляет 64-битное адресное
пространство и расширяет регистровые ресурсы для поддержки большей производительности
перекомпилированных 64-битных программ. Архитектура обеспечивает поддержку устаревшего
16-битного и 32-битного кода приложений и операционных систем без их модификации или
перекомпиляции.
Отличительной особенностью Intel 64 является поддержка шестнадцати 64-битных регистров
общего назначения (в x86-32 имелось восемь 32-битных регистров). Поддерживаются 64-битные
арифметические и логические операции над целыми числами. Поддерживаются 64-битные
виртуальные адреса. Для адресации новых регистров для команд введены "префиксы
расширения регистра", для которых был выбран диапазон кодов 40h-4Fh, использующихся для
команд INC <регистр> и DEC <регистр> в 32- и 16-битных режимах. Команды INC и DEC в 64-битном
режиме должны кодироваться в более общей, двухбайтовой форме.
Регистры:
16 целочисленных 64-битных регистра общего назначения (RAX, RBX, RCX, RDX, RBP, RSI, RDI, RSP,
R8 — R15),
8 80-битных регистров с плавающей точкой (ST0 — ST7),
8 64-битных регистров Multimedia Extensions (MM0 — MM7, имеют общее пространство с
регистрами ST0 — ST7),
16 128-битных регистров SSE (XMM0 — XMM15),
64-битный указатель RIP и 64-битный регистр флагов RFLAGS.
Необходимость 64-битной архитектуры определяется приложениями, которым необходимо
большое адресное пространство. В первую очередь это высокопроизводительные серверы,
системы управления базами данных, САПР и, конечно, игры. Такие приложения получат
существенные преимущества от 64-битного адресного пространства и увеличения количества
регистров. Малое количество регистров, доступное в устаревшей x86 архитектуре, ограничивает
производительность в вычислительных задачах. Увеличенное количество регистров обеспечивает
достаточную производительность для многих приложений.
Подчеркнем основные достоинства архитектуры x86-64:
• 64-битное адресное пространство;
• расширенный набор регистров;
• привычный для разработчиков набор команд;
• возможность запуска старых 32-битных приложений в 64-битной операционной системе;
• возможность использования 32-битных операционных систем.
64-битные операционные системы
Практически все современные операционные системы сейчас имеют версии для архитектуры Intel
64. Например, Microsoft предоставляет Windows XP x64. Крупнейшие разработчики UNIX систем
5. также поставляют 64-битные версии, как например Linux Debian 3.5 x86-64. Однако это не
означает, что весь код такой системы является полностью 64-битным. Часть кода ОС и многие
приложения вполне могут оставаться 32-битными, так как Intel 64 обеспечивает обратную
совместимость с 32-битными приложениями. Например, 64-битная версия Windows использует
специальный режим WoW64 (Windows-on-Windows 64), который транслирует вызовы 32-битных
приложений к ресурсам 64-битной операционной системы.
Далее в статье мы будем рассматривать только 64-битные операционные системы семейства
Windows.
WoW64
Windows-on-Windows 64-bit (WoW64) - подсистема операционной системы Windows,
позволяющая запускать 32-битные приложения на всех 64-битных версиях Windows.
Подсистема WoW64 не поддерживает следующие программы:
• программы, скомпилированные для 16-разрядных операционных систем;
• программы режима ядра, скомпилированные для 32-разрядных операционных систем.
Существуют различия WoW64 в зависимости от архитектуры процессора. Например, 64-битная
версия Windows разработанная для процессора Intel Itanium 2 использует WoW64 для эмуляции
x86 инструкций. Такая эмуляция весьма ресурсоемка по сравнению с WoW64 для архитектуры
Intel 64, так как происходит переключение с 64-битного режима в режим совместимости, при
выполнении 32-битных программ.
WoW64 на архитектуре Intel 64 (AMD64 / x64) не требует эмуляции инструкций. Здесь подсистема
WoW64 эмулирует только 32-битное окружение, за счет дополнительной прослойки между 32-
битным приложением и 64-битным Windows API. Где-то эта прослойка тонкая, где-то не очень.
Для средней программы потери в производительности из-за наличия такой прослойки составят
около 2%. Для некоторых программ это значение может быть больше. Два процента это немного,
но следует учитывать, что 32-битные приложения работают немного медленнее под управлением
64-битной операционной системы Windows, чем в 32-битной среде.
Компиляция 64-битного кода не только исключает необходимость в WoW64, но и дает
дополнительный прирост производительности. Это связано с архитектурными изменениями в
микропроцессоре, такими как увеличение количества регистров общего назначения. Для средней
программы можно ожидать в пределах 5-15% прироста производительности от простой
перекомпиляции.
Из-за наличия прослойки WoW64 32-битные программы работают менее эффективно в 64-битной
среде, чем в 32-битной. Но все-таки, простые 32-битные приложения могут получить одно
преимущество от их запуска в 64-битной среде. Вы, наверное, знаете, что программа, собранная с
ключом /LARGEADDRESSAWARE:YES может выделять до 3-х гигабайт памяти, если 32-битная
операционная система Windows запущена с ключом /3gb. Так вот, эта же 32-битная программа,
запущенная на 64-битной системе, может выделить почти 4 GB памяти (на практике около 3.5 GB).
Подсистема WoW64 изолирует 32-разрядные программы от 64-разрядных путем
перенаправления обращений к файлам и реестру. Это предотвращает случайный доступ 32-
битных программ к данным 64-битных приложений. Например, 32-битное приложение, которое
6. запускает файл DLL из каталога %systemroot%System32, может случайно обратиться к 64-
разрядному файлу DLL, который несовместим с 32-битной программой. Во избежание этого
подсистема WoW64 перенаправляет доступ из папки %systemroot%System32 в папку
%systemroot%SysWOW64. Это перенаправление позволяет предотвратить ошибки
совместимости, поскольку при этом требуется файл DLL, созданный специально для работы с 32-
разрядными приложениями.
Подробнее с механизмами перенаправления файловой системы и реестра можно познакомиться
в разделе MSDN "Running 32-bit Applications".
Программная модель Win64
Также как и в Win32 размер страниц в Win64 составляет 4Кб. Первые 64Кб адресного пространства
никогда не отображаются, то есть наименьший правильный адрес это 0x10000. В отличие от
Win32, системные DLL загружаются выше 4Гб.
Особенность компиляторов для Intel 64 в том, что они могут наиболее эффективно использовать
регистры для передачи параметров в функции, вместо использования стека. Это позволило
разработчикам Win64 архитектуры избавиться от такого понятия как соглашение о вызовах (calling
convention). В Win32 можно использовать разные соглашения: __stdcall, __cdecl, __fastcall и так
далее. В Win64 есть только одно соглашение о вызовах. Рассмотрим пример, как передаются в
регистрах четыре аргумента типа integer:
• RCX: первый аргумент
• RDX: второй аргумент
• R8: третий аргумент
• R9: четвертый аргумент
Аргументы после первых четырех integer передаются на стеке. Для float аргументов используются
XMM0-XMM3 регистры, а также стек.
Разница в соглашениях о вызове приводит к тому, что в одной программе нельзя использовать и
64-битный, и 32-битный код. Другими словами, если приложение скомпилировано для 64-битного
режима, то все используемые библиотеки (DLL) также должны быть 64-битными.
Передача параметров через регистры является одним из новшеств, делающих 64-битные
программы более производительными, чем 32-битные. Дополнительный выигрыш в
производительности можно получить, используя 64-битные типы данных.
Адресное пространство
Хотя 64-битный процессор теоретически может адресовать 16 экзабайт памяти (2^64), Win64 в
настоящий момент поддерживает 16 терабайт (2^44). Этому есть несколько причин. Текущие
процессоры могут обеспечивать доступ лишь к 1 терабайту (2^40) физической памяти. Архитектура
(но не аппаратная часть) может расширить это пространство до 4 петабайт (2^52). Однако в этом
случае необходимо огромное количество памяти для страничных таблиц, отображающих память.
Помимо перечисленных ограничений, объем памяти, который доступен в той или иной версии 64-
битной операционной системе Windows зависит также от коммерческих соображений компании
7. Microsoft. Ниже приведена информация по объему памяти, поддерживаемой различными
версиями 64-биными версиями Windows:
Windows XP Professional - 128 Gbyte;
Windows Server 2003, Standard - 32 Gbyte;
Windows Server 2003, Enterprise - 1 Tbyte;
Windows Server 2003, Datacenter - 1 Tbyte;
Windows Server 2008, Datacenter - 2 Tbyte;
Windows Server 2008, Enterprise - 2 Tbyte;
Windows Server 2008, Standard - 32 Gbyte;
Windows Server 2008, Web Server - 32 Gbyte;
Vista Home Basic - 8 Gbyte;
Vista Home Premium - 16 Gbyte;
Vista Business - 128 Gbyte;
Vista Enterprise - 128 Gbyte;
Vista Ultimate - 128 Gbyte;
Windows 7 Home Basic - 8 Gbyte;
Windows 7 Home Premium - 16 Gbyte;
Windows 7 Professional - 192 Gbyte;
Windows 7 Enterprise - 192 Gbyte;
Windows 7 Ultimate - 192 Gbyte;
Разработка 64-битных приложений
Наиболее полно вопросы разработки 64-битных приложений рассмотрены в курсе "Уроки
разработки 64-битных приложений на языке Си/Си++". Содержание:
Урок 01. Что такое 64-битные системы.
Урок 02. Поддержка 32-битных приложений.
Урок 03. Перенос кода на 64-битные системы. За и против.
Урок 04. Создание 64-битной конфигурации.
Урок 05. Сборка 64-битного приложения.
Урок 06. Ошибки в 64-битном коде.
8. Урок 07. Проблемы выявления 64-битных ошибок.
Урок 08. Статический анализ для выявления 64-битных ошибок.
Урок 09. Паттерн 01. Магические числа.
Урок 10. Паттерн 02. Функции с переменным количеством аргументов.
Урок 11. Паттерн 03. Операции сдвига.
Урок 12. Паттерн 04. Виртуальные функции.
Урок 13. Паттерн 05. Адресная арифметика.
Урок 14. Паттерн 06. Изменение типа массива.
Урок 15. Паттерн 07. Упаковка указателей.
Урок 16. Паттерн 08. Memsize-типы в объединениях.
Урок 17. Паттерн 09. Смешанная арифметика.
Урок 18. Паттерн 10. Хранение в double целочисленных значений.
Урок 19. Паттерн 11. Сериализация и обмен данными.
Урок 20. Паттерн 12. Исключения.
Урок 21. Паттерн 13. Выравнивание данных.
Урок 22. Паттерн 14. Перегруженные функции.
Урок 23. Паттерн 15. Рост размеров структур.
Урок 24. Фантомные ошибки.
Урок 25. Практическое знакомство с паттернами 64-битных ошибок.
Урок 26. Оптимизация 64-битных программ.
Урок 27. Особенности создания инсталляторов для 64-битного окружения.
Урок 28. Оценка стоимости процесса 64-битной миграции Си/Си++ приложений.
Авторами курса являются сотрудники компании "СиПроВер", занимающейся разработкой
статического анализатора кода Viva64 для выявления ошибок в 64-битных программа. На сайте
компании можно найти множество других ресурсов, посвященных разработке новых 64-битных
приложений и миграции 32-битных приложений на 64-битные системы. В качестве примера
можно привести раздел с обзорами статей по тематике связанной с 64-битнми технологиями.
Библиографический список
1. Джон Р. Машей. Долгая дорога к 64 битам. http://www.viva64.com/go.php?url=321
2. Wikipedia. 64-bit. http://www.viva64.com/go.php?url=203