﻿# 64 бита

Статья раскрывает смысл термина "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\.

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 с поддержкой новых команд\.

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 macOS X 10\.6, "Snow Leopard" которая имеет 64\-битное ядро и предназначена для процессоров AMD64 / Intel 64, однако по умолчанию эта система устанавливается только на некоторые из последних моделей компьютеров компании Apple\. Большинство приложений, поставляемых с macOS X 10\.6, теперь также являются 64\-битными\.

Более подробно с историей развития 64\-битных систем можно познакомиться в статье Джона Машей "[Долгая дорога к 64 битам](https://queue.acm.org/detail.cfm?id=1165766)" \[1\] и в энциклопедической статье в Wikipedia "[64\-bit](https://en.wikipedia.org/wiki/64-bit_computing)" \[2\]\.

## Прикладное программирование и 64\-битные системы

На момент написания статьи в 2010 году, наиболее известными и распространенными являются две [64\-битные](https://pvs-studio.ru/ru/blog/terms/0001/) архитектуры микропроцессоров: IA64 и Intel 64\.

1. **IA\-64** 64\-битная микропроцессорная архитектура, разработанная совместно компаниями Intel и Hewlett Packard\. Реализована в микропроцессорах Itanium и Itanium 2\. Для более подробного знакомства с архитектурой IA\-64 можно обратиться к следующим статьям в Wikipedia: "[IA\-64](https://ru.wikipedia.org/wiki/Intel_Architecture)", "[Itanium](https://ru.wikipedia.org/wiki/Itanium)", "[Itanium 2](https://ru.wikipedia.org/wiki/Itanium)"\. Архитектуру Itanium поддерживает большое количество производителей серверов: Bull, Fujitsu, Fujitsu Siemens Computers, Hitachi, HP, NEC, SGI и Unisys\. Эти производители присоединились к Intel и множеству разработчиков ПО для создания Itanium Solutions Alliance, с целью продвижения архитектуры и ускорения темпов портирования ПО\.
1. **Intel 64** \(AMD64 **/** x86\-64 / x64 / EM64T\) \- данная архитектура представляет собой расширение архитектуры [x86](https://pvs-studio.ru/ru/blog/terms/0060/) с полной обратной совместимостью\. Существует множество вариантов названия данной архитектуры, что приводит к путанице, хотя, по сути, все эти названия обозначают одно и тоже: x86\-64, AA\-64, Hammer Architecture, AMD64, Yamhill Technology, EM64T, IA\-32e, Intel 64, x64\. Более подробно узнать о том, как появилось так много названий, можно в статье из Wikipedia: "[X86\-64](https://ru.wikipedia.org/wiki/X86-64)"\. Процессоры с архитектурой Intel 64 нашли широкое распространение персональных компьютерах\. И скорее всего ваш компьютер оснащен именно процессором с данной архитектурой\.

Важно понимать, что IA\-64 и Intel 64 \(AMD64\) это совершенно разные, несовместимые друг с другом, микропроцессорные архитектуры\. Далее в статье мы будем рассматривать только архитектуру Intel 64 \(x64 / AMD64\), как более популярную среди разработчиков прикладного программного обеспечения для операционной системы Windows\. Для краткости программную модель Intel 64, доступную программисту в 64\-битной системе Windows, называют [Win64](https://pvs-studio.ru/ru/blog/terms/0055/)\.

## Архитектура Intel 64 \(AMD64\)

Рассматриваемая архитектура [Intel 64](https://pvs-studio.ru/ru/blog/terms/0022/) простое, но в то же время мощное обратно совместимое расширение устаревшей промышленной архитектуры 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 систем также поставляют 64\-битные версии, как например Linux Debian 3\.5 x86\-64\. Однако это не означает, что весь код такой системы является полностью 64\-битным\. Часть кода ОС и многие приложения вполне могут оставаться 32\-битными, так как Intel 64 обеспечивает обратную совместимость с 32\-битными приложениями\. Например, 64\-битная версия Windows использует специальный режим [WoW64](https://pvs-studio.ru/ru/blog/terms/0056/) \(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](https://pvs-studio.ru/ru/blog/terms/0060/) инструкций\. Такая эмуляция весьма ресурсоемка по сравнению с WoW64 для архитектуры [Intel 64](https://pvs-studio.ru/ru/blog/terms/0022/), так как происходит переключение с 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\-битное приложение, которое запускает файл DLL из каталога %systemroot%\\System32, может случайно обратиться к 64\-разрядному файлу DLL, который несовместим с 32\-битной программой\. Во избежание этого подсистема WoW64 перенаправляет доступ из папки %systemroot%\\System32 в папку %systemroot%\\SysWOW64\. Это перенаправление позволяет предотвратить ошибки совместимости, поскольку при этом требуется файл DLL, созданный специально для работы с 32\-разрядными приложениями\.

Подробнее с механизмами перенаправления файловой системы и реестра можно познакомиться в разделе MSDN "[Running 32\-bit Applications](https://docs.microsoft.com/en-us/windows/win32/winprog64/running-32-bit-applications?redirectedfrom=MSDN)"\.

## Программная модель Win64

Также как и в [Win32](https://pvs-studio.ru/ru/blog/terms/0054/) размер страниц в Win64 составляет 4Кб\. Первые 64Кб адресного пространства никогда не отображаются, то есть наименьший правильный адрес это 0x10000\. В отличие от Win32, системные DLL загружаются выше 4Гб\.

Особенность компиляторов для Intel 64 в том, что они могут наиболее эффективно использовать регистры для передачи параметров в функции, вместо использования стека\. Это позволило разработчикам Win64 архитектуры избавиться от такого понятия как [соглашение о вызовах](https://ru.wikipedia.org/wiki/%D0%A1%D0%BE%D0%B3%D0%BB%D0%B0%D1%88%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BE_%D0%B2%D1%8B%D0%B7%D0%BE%D0%B2%D0%B5) \(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 зависит также от коммерческих соображений компании 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\-битных приложений на языке Си/Си\+\+](https://pvs-studio.ru/ru/blog/lessons/)"\. Содержание:

Урок 01\. [ Что такое 64\-битные системы](https://pvs-studio.ru/ru/blog/lessons/0001/)\.

Урок 02\. [ Поддержка 32\-битных приложений](https://pvs-studio.ru/ru/blog/lessons/0002/)\.

Урок 03\. [ Перенос кода на 64\-битные системы\. За и против](https://pvs-studio.ru/ru/blog/lessons/0003/)\.

Урок 04\. [ Создание 64\-битной конфигурации](https://pvs-studio.ru/ru/blog/lessons/0004/)\.

Урок 05\. [ Сборка 64\-битного приложения](https://pvs-studio.ru/ru/blog/lessons/0005/)\.

Урок 06\. [ Ошибки в 64\-битном коде](https://pvs-studio.ru/ru/blog/lessons/0006/)\.

Урок 07\. [ Проблемы выявления 64\-битных ошибок](https://pvs-studio.ru/ru/blog/lessons/0007/)\.

Урок 08\. [Статический анализ для выявления 64\-битных ошибок](https://pvs-studio.ru/ru/blog/lessons/0008/)\.

Урок 09\. [ Паттерн 01\. Магические числа](https://pvs-studio.ru/ru/blog/lessons/0009/)\.

Урок 10\. [Паттерн 02\. Функции с переменным количеством аргументов](https://pvs-studio.ru/ru/blog/lessons/0010/)\.

Урок 11\. [ Паттерн 03\. Операции сдвига](https://pvs-studio.ru/ru/blog/lessons/0011/)\.

Урок 12\. [ Паттерн 04\. Виртуальные функции](https://pvs-studio.ru/ru/blog/lessons/0012/)\.

Урок 13\. [ Паттерн 05\. Адресная арифметика](https://pvs-studio.ru/ru/blog/lessons/0013/)\.

Урок 14\. [ Паттерн 06\. Изменение типа массива](https://pvs-studio.ru/ru/blog/lessons/0014/)\.

Урок 15\. [ Паттерн 07\. Упаковка указателей](https://pvs-studio.ru/ru/blog/lessons/0015/)\.

Урок 16\. [ Паттерн 08\. Memsize\-типы в объединениях](https://pvs-studio.ru/ru/blog/lessons/0016/)\.

Урок 17\. [ Паттерн 09\. Смешанная арифметика](https://pvs-studio.ru/ru/blog/lessons/0017/)\.

Урок 18\. [ Паттерн 10\. Хранение в double целочисленных значений](https://pvs-studio.ru/ru/blog/lessons/0018/)\.

Урок 19\. [ Паттерн 11\. Сериализация и обмен данными](https://pvs-studio.ru/ru/blog/lessons/0019/)\.

Урок 20\. [ Паттерн 12\. Исключения](https://pvs-studio.ru/ru/blog/lessons/0020/)\.

Урок 21\. [ Паттерн 13\. Выравнивание данных](https://pvs-studio.ru/ru/blog/lessons/0021/)\.

Урок 22\. [ Паттерн 14\. Перегруженные функции](https://pvs-studio.ru/ru/blog/lessons/0022/)\.

Урок 23\. [ Паттерн 15\. Рост размеров структур](https://pvs-studio.ru/ru/blog/lessons/0023/)\.

Урок 24\. [Фантомные ошибки](https://pvs-studio.ru/ru/blog/lessons/0024/)\.

Урок 25\. [ Практическое знакомство с паттернами 64\-битных ошибок](https://pvs-studio.ru/ru/blog/lessons/0025/)\.

Урок 26\. [Оптимизация 64\-битных программ](https://pvs-studio.ru/ru/blog/lessons/0026/)\.

Урок 27\. [ Особенности создания инсталляторов для 64\-битного окружения](https://pvs-studio.ru/ru/blog/lessons/0027/)\.

Урок 28\. [ Оценка стоимости процесса 64\-битной миграции Си/Си\+\+ приложений](https://pvs-studio.ru/ru/blog/lessons/0028/)\.

Авторами курса являются сотрудники компании "СиПроВер", занимающейся разработкой статического анализатора кода Viva64 для выявления ошибок в 64\-битных программа\. На сайте компании можно найти множество других ресурсов, посвященных разработке новых 64\-битных приложений и миграции 32\-битных приложений на 64\-битные системы\. В качестве примера можно привести [раздел с обзорами статей](https://pvs-studio.ru/ru/blog/posts/) по тематике связанной с 64\-битнми технологиями\.

## Библиографический список

1. Джон Р\. Машей\. Долгая дорога к 64 битам\. [http://queue\.acm\.org/detail\.cfm?id\=1165766](https://queue.acm.org/detail.cfm?id=1165766)
1. Wikipedia\. 64\-bit\. [https://en\.wikipedia\.org/wiki/64\-bit\_computing](https://en.wikipedia.org/wiki/64-bit_computing)