﻿# 64\-bit

Я собрал здесь ссылки на большое количество информации, которая может понадобиться программистам при освоении 64\-битного мира\. В основном речь идёт о языках Си/Си\+\+, но уверен, разработчики на других языках также найдут здесь много интересного и полезного\.

## Что такое 64\-битные системы, история развития

1. John R\. Mashey\. [The Long Road to 64 Bits](https://queue.acm.org/detail.cfm?id=1165766)\.
1. Wikipedia\. [64\-bit computing](https://en.wikipedia.org/wiki/64-bit_computing)\.

## Архитектура 64\-битных систем

1. Sachin R Sangoi\. [The 64 bit OS Architecture](https://www.codeproject.com/articles/14156/the-64-bit-os-architecture)\.
1. Андрей Карпов\. [Архитектура AMD64 \(EM64T\)](https://pvs-studio.ru/ru/blog/posts/a0029/)\.
1. Wikipedia\. [Itanium \(IA\-64\)](https://en.wikipedia.org/wiki/Itanium)\.
1. Wikipedia\. [x86\-64 \(x64, AMD64, Intel64\)](https://en.wikipedia.org/wiki/X86-64)\.
1. Jeremy Gordon\. [Writing 64\-bit programs](http://www.godevtool.com/GoasmHelp/64bits.htm)\.
1. Eric Palmer\. [CPUID for x64 Platforms and Microsoft Visual Studio\* \.NET 2005](https://software.intel.com/content/www/us/en/develop/topics/modern-code.html)\.
1. [Stack frame layout on x86\-64](https://eli.thegreenplace.net/2011/09/06/stack-frame-layout-on-x86-64/)\.
1. Mike Becker\. [Accessing 32\-bit DLLs from 64\-bit code](https://blog.mattmags.com/2007/06/30/accessing-32-bit-dlls-from-64-bit-code/)\. 
1. [The history of calling conventions, part 5: amd64\.](https://devblogs.microsoft.com/oldnewthing/2004/01/14) 
1. Андрей Карпов\. [Причины, по которым 64\-битные программы требуют больше стековой памяти](https://pvs-studio.ru/ru/blog/posts/cpp/0069/)\.
1. База знаний\. [Какими преимуществами обладают 64\-разрядные процессоры по сравнению с 32\-разрядными?](https://pvs-studio.ru/ru/blog/posts/k0002/)
1. База знаний\. [Почему 64\-битные приложения работают быстрее 32\-битных?](https://pvs-studio.ru/ru/blog/posts/k0003/)

## Модель данных, размеры типов, выравнивание

1. [Модель данных](https://pvs-studio.ru/ru/blog/terms/0012/)\.
1. [64\-Bit Programming Models: Why LP64?](http://www.unix.org/version2/whatsnew/lp64_wp.html)
1. [Why did the Win64 team choose the LLP64 model?](https://devblogs.microsoft.com/oldnewthing/2005/01/31)
1. Kang Su Gatlin\. [Windows Data Alignment on IPF, x86, and x64](https://www.microsoft.com/en-us/download/details.aspx?id=55979)\.
1. Андрей Карпов\. [Что такое size\_t и ptrdiff\_t](https://pvs-studio.ru/ru/blog/posts/cpp/a0050/)\.
1. Dan Saks\. [Why size\_t matters](https://www.embedded.com/why-size_t-matters/)\.

## Курс по разработке 64\-битных приложений

1. [Что такое 64\-битные системы\.](https://pvs-studio.ru/ru/blog/lessons/0001/)
1. [Поддержка 32\-битных приложений\.](https://pvs-studio.ru/ru/blog/lessons/0002/)
1. [Перенос кода на 64\-битные системы\. За и против\.](https://pvs-studio.ru/ru/blog/lessons/0003/)
1. [Создание 64\-битной конфигурации\.](https://pvs-studio.ru/ru/blog/lessons/0004/)
1. [Сборка 64\-битного приложения\.](https://pvs-studio.ru/ru/blog/lessons/0005/)
1. [Ошибки в 64\-битном коде\.](https://pvs-studio.ru/ru/blog/lessons/0006/)
1. [Проблемы выявления 64\-битных ошибок\.](https://pvs-studio.ru/ru/blog/lessons/0007/)
1. [Статический анализ для выявления 64\-битных ошибок\.](https://pvs-studio.ru/ru/blog/lessons/0008/)
1. [Паттерн 01\. Магические числа\.](https://pvs-studio.ru/ru/blog/lessons/0009/)
1. [Паттерн 02\. Функции с переменным количеством аргументов\.](https://pvs-studio.ru/ru/blog/lessons/0010/)
1. [Паттерн 03\. Операции сдвига\.](https://pvs-studio.ru/ru/blog/lessons/0011/)
1. [Паттерн 04\. Виртуальные функции\.](https://pvs-studio.ru/ru/blog/lessons/0012/)
1. [Паттерн 05\. Адресная арифметика\.](https://pvs-studio.ru/ru/blog/lessons/0013/)
1. [Паттерн 06\. Изменение типа массива\.](https://pvs-studio.ru/ru/blog/lessons/0014/)
1. [Паттерн 07\. Упаковка указателей\.](https://pvs-studio.ru/ru/blog/lessons/0015/)
1. [Паттерн 08\. Memsize\-типы в объединениях\.](https://pvs-studio.ru/ru/blog/lessons/0016/)
1. [Паттерн 09\. Смешанная арифметика\.](https://pvs-studio.ru/ru/blog/lessons/0017/)
1. [Паттерн 10\. Хранение в double целочисленных значений\.](https://pvs-studio.ru/ru/blog/lessons/0018/)
1. [Паттерн 11\. Сериализация и обмен данными\.](https://pvs-studio.ru/ru/blog/lessons/0019/)
1. [Паттерн 12\. Исключения\.](https://pvs-studio.ru/ru/blog/lessons/0020/)
1. [Паттерн 13\. Выравнивание данных\.](https://pvs-studio.ru/ru/blog/lessons/0021/)
1. [Паттерн 14\. Перегруженные функции\.](https://pvs-studio.ru/ru/blog/lessons/0022/)
1. [Паттерн 15\. Рост размеров структур\.](https://pvs-studio.ru/ru/blog/lessons/0023/)
1. [Фантомные ошибки\.](https://pvs-studio.ru/ru/blog/lessons/0024/)
1. [Практическое знакомство с паттернами 64\-битных ошибок\.](https://pvs-studio.ru/ru/blog/lessons/0025/)
1. [Оптимизация 64\-битных программ\.](https://pvs-studio.ru/ru/blog/lessons/0026/)
1. [Особенности создания инсталляторов для 64\-битного окружения\.](https://pvs-studio.ru/ru/blog/lessons/0027/)
1. [Оценка стоимости процесса 64\-битной миграции Си/Си\+\+ приложений\.](https://pvs-studio.ru/ru/blog/lessons/0028/)

## Разные статьи

1. Андрей Карпов\. [Коллекция примеров 64\-битных ошибок в реальных программах](https://pvs-studio.ru/ru/blog/posts/cpp/a0065/)\.
1. [64\-bit ODBC](https://www.easysoft.com/developer/interfaces/odbc/64-bit.html)\.
1. [Migrating 32\-bit Managed Code to 64\-bit](https://msdn.microsoft.com/en-us/library/ms973190.aspx)\.
1. [Checklist for 64\-bit Microsoft Windows Drivers](https://msdn.microsoft.com/library/windows/hardware/ff557573)\.
1. Андрей Карпов\. [64\-битный конь, который умеет считать](https://pvs-studio.ru/ru/blog/posts/cpp/a0043/)\.
1. Андрей Карпов\. [Проблемы тестирования 64\-битных приложений](https://pvs-studio.ru/ru/blog/posts/cpp/a0006/)\.
1. Андрей Карпов\. [64\-битные программы и вычисления с плавающей точкой](https://pvs-studio.ru/ru/blog/posts/cpp/0074/)\.

## Сборка приложений

1. Андрей Карпов\. [7 шагов по переносу программы на 64\-битную систему\.](https://pvs-studio.ru/ru/blog/posts/cpp/a0042/)
1. Bojan Komazec\. [32\-bit and 64\-bit versions of Windows C\+\+ application](https://www.bojankomazec.com/2011/10/32-bit-and-64-bit-versions-of-windows-c.html)\.
1. Daniel Pistelli\. [Moving to Windows Vista x64](https://www.codeproject.com/articles/17263/moving-to-windows-vista-x64)\.
1. База знаний\. [Предупреждения компилятора C4311 и C4312, выдаваемые при использовании ключа /Wp64](https://pvs-studio.ru/ru/blog/posts/cpp/k0008/)
1. База знаний\. [Как скомпилировать 64\-битное приложение, используя Visual C\+\+ Express 2005/2008/2010?](https://pvs-studio.ru/ru/blog/posts/k0009/)
1. База знаний\. [Распространенная ошибка при компиляции 64\-битного приложения: error C2440, OnTimer](https://pvs-studio.ru/ru/blog/posts/cpp/k0011/)
1. База знаний\. [Непонятные ошибки при компиляции 64\-битной версии, error C2664](https://pvs-studio.ru/ru/blog/posts/cpp/k0012/)
1. База знаний\. [Распространенная ошибка при компиляции 64\-битного приложения: error C4235, Assembler](https://pvs-studio.ru/ru/blog/posts/k0013/)
1. База знаний\. [Как используя ifdef узнать, что объявлен тип DWORD\_PTR?](https://pvs-studio.ru/ru/blog/posts/cpp/k0014/)
1. База знаний\. [Почему Visual С\+\+ больше не поддерживает встроенный ассемблер для Intel 64 и IA\-64?](https://pvs-studio.ru/ru/blog/posts/k0015/)
1. База знаний\. [Warning C4267 в выражении unsigned n \= str\.find\(substr\)](https://pvs-studio.ru/ru/blog/posts/cpp/k0027/)
1. База знаний\. [Как с помощью \#ifdef узнать, что собирается 64\-битный проект в Visual Studio](https://pvs-studio.ru/ru/blog/posts/k0032/)
1. База знаний\. [Использование макросов \_WIN64/WIN64](https://pvs-studio.ru/ru/blog/posts/k0040/)

## Прочее

1. Андрей Карпов\. [Красивая 64\-битная ошибка на языке Си](https://pvs-studio.ru/ru/blog/posts/cpp/0033/)\.
1. База знаний\. [Как правильно распечатать значение типа \_\_int64, size\_t и ptrdiff\_t](https://pvs-studio.ru/ru/blog/posts/cpp/k0046/)
1. База знаний\. [Можно ли использовать более 2 гигабайт памяти в 32\-битной программе, запущенной в 64\-битной Windows?](https://pvs-studio.ru/ru/blog/posts/k0001/)
1. База знаний\. [Как корректно привести указатель к int в 64\-битной программе?](https://pvs-studio.ru/ru/blog/posts/cpp/k0005/)
1. База знаний\. [Как 32\-битной программе узнать, что она запущена в 64\-битной Windows?](https://pvs-studio.ru/ru/blog/posts/cpp/k0016/)
1. База знаний\. [Функции класса ntohl/htonl и работа с 64\-битными значениями](https://pvs-studio.ru/ru/blog/posts/cpp/k0018/)
1. База знаний\. [Отличие %p от %x](https://pvs-studio.ru/ru/blog/posts/cpp/k0019/)
1. База знаний\. [Почему происходит замещение значения переменной среды ProgramFiles на ProgramFiles\(x86\) ?](https://pvs-studio.ru/ru/blog/posts/k0020/)
1. База знаний\. [Можно заставить тип size\_t быть 32\-битным в 64\-битной программе?](https://pvs-studio.ru/ru/blog/posts/cpp/k0021/)
1. База знаний\. [Является ли size\_t стандартным типом в языке Си\+\+? В языке Си?](https://pvs-studio.ru/ru/blog/posts/k0022/)
1. База знаний\. [Почему Windows помещает 64\-битные модули в System32?](https://pvs-studio.ru/ru/blog/posts/k0028/)
1. База знаний\. [WOW6432Node и API\-функции RegOpenKeyEx / RegEnumKeyEx](https://pvs-studio.ru/ru/blog/posts/k0029/)
1. База знаний\. [Почему WoW64 использует перенаправление реестра и файловой системы?](https://pvs-studio.ru/ru/blog/posts/k0030/)
1. База знаний\. [Путаница с WPARAM и UINT, а также LPARAM с LONG](https://pvs-studio.ru/ru/blog/posts/cpp/k0031/)
1. База знаний\. [Сколько памяти будет доступно приложению в Win32 и в Win64](https://pvs-studio.ru/ru/blog/posts/k0036/)
1. База знаний\. [Что можно использовать вместо инструкции "int 3" в 64\-битной программе?](https://pvs-studio.ru/ru/blog/posts/k0035/)
1. База знаний\. [Можно ли в 64\-битной программе использовать 32\-битные указатели?](https://pvs-studio.ru/ru/blog/posts/cpp/k0033/)
1. База знаний\. [Как узнать в 32\-битной программе, какие 64\-битные процессы запущены?](https://pvs-studio.ru/ru/blog/posts/k0034/)
1. База знаний\. [Что использовать вместо rundll32\.exe для запуска 64\-битных DLL](https://pvs-studio.ru/ru/blog/posts/k0037/)
1. База знаний\. [Почему создание 64\-битной версии программы может быть не простым делом?](https://pvs-studio.ru/ru/blog/posts/k0038/)
1. База знаний\. [Как в Win64 узнать, сколько процессорных ядер в системе?](https://pvs-studio.ru/ru/blog/posts/k0039/)
1. База знаний\. [Почему 64\-битные операционные системы используют для адресации только 48\-битные адреса](https://pvs-studio.ru/ru/blog/posts/k0042/)
1. База знаний\. [Что такое макрос POINTER\_32 ?](https://pvs-studio.ru/ru/blog/posts/k0043/)
1. База знаний\. [От чего зависит размер указателя в C\+\+ на различных платформах?](https://pvs-studio.ru/ru/blog/posts/cpp/k0044/)

## Приглашаю

1. Приглашаю последовать за нами в твиттере [@Code\_Analysis](https://twitter.com/Code_Analysis) или на Reddit [Viva64](https://www.reddit.com/r/viva64/)\. Тематика: Си/Си\+\+, 64\-битные системы, тестирование, алгоритмы  и вообще разное интересное о программировании\.
1. Приглашаю скачать анализатор [PVS\-Studio](https://pvs-studio.ru/ru/pvs-studio/) и сделать надежными ваши 64\-битные приложения\.