64-разрядные приложения
При компиляции приложения можно указать, должно ли оно запускаться в 64-разрядной операционной системе Windows в качестве собственного приложения или в эмуляторе WOW64 (в 32- или 64-разрядной ОС Windows). WOW64 — это среда совместимости, которая позволяет выполнять 32-разрядное приложение в 64-разрядной системе. Эмулятор WOW64 входит в состав всех 64-разрядных версий операционной системы Windows.
Выполнение 32-разрядных и 64-разрядных приложений в Windows
32-разрядные приложения, созданные на основе платформа .NET Framework 4 или более поздних версий, выполняются в WOW64 в 64-разрядных системах.
Visual Studio устанавливает на компьютер с архитектурой x86 32-разрядную версию среды CLR, а на компьютер с 64-разрядной ОС Windows — 32-разрядную и соответствующую 64-разрядную версию среды CLR. (Так как среда Visual Studio является 32-разрядным приложением, то при установке в 64-разрядной системе она выполняется в эмуляторе WOW64.)
Примечание.
Из-за особенностей эмуляции x86 и подсистемы WOW64 для процессоров семейства Itanium выполнение приложений ограничено одним процессором. Эти факторы снижают производительность и масштабируемость 32-разрядных приложений .NET Framework, выполняемых в системах на базе Itanium. Для повышения производительности и масштабируемости рекомендуем использовать версию .NET Framework 4 со встроенной поддержкой 64-разрядных систем на базе Itanium.
При запуске 64-разрядного управляемого приложения в 64-разрядной операционной системе Windows по умолчанию можно создавать объекты размером не более 2 гигабайт (ГБ). Однако в платформа .NET Framework 4.5 это ограничение можно увеличить. Дополнительные сведения см. в элементе <gcAllowVeryLargeObjects>.
Многие сборки выполняются в 32- и 64-разрядной среде CLR одинаково. Однако в зависимости от версии среды CLR работа некоторых программ может отличаться по одной из следующих причин:
- структуры, содержащие члены, размер которых меняется в зависимости от платформы (например, любой тип указателя);
- Арифметика указателя, содержащая постоянные размеры.
- Неверный вызов платформ или объявления СОМ, использующие дескрипторы
Int32
вместоIntPtr
. - приведение
IntPtr
кInt32
.
Дополнительные сведения о переносе 32-разрядного приложения в 64-разрядную среду CLR см. на странице Миграция 32-разрядного управляемого кода в 64-разрядную систему.
Общие сведения о 64-разрядном программировании
Общие сведения о 64-разрядном программировании см. в перечисленных ниже материалах.
В документации по Windows SDK см. статью Programming Guide for 64-bit Windows (Руководство по программированию для 64-разрядных версий Windows).
Сведения о поддержке создания 64-разрядных приложений в Visual Studio см. в разделе Поддержка 64-разрядной среды разработки Visual Studio.
Поддержка создания 64-разрядных приложений компилятором
Приложение, построенное с помощью .NET Framework на 32- или 64-разрядном компьютере, на 64-разрядном компьютере по умолчанию выполняется как собственное приложение (не в эмуляторе WOW64). В таблице ниже перечислены материалы, в которых описывается использование компиляторов Visual Studio для создания 64-разрядных приложений, выполняемых как собственные, в эмуляторе WOW64 или обоими способами.
GNU C ++ | Параметр компилятора |
---|---|
Visual Basic | -platform (Visual Basic) |
Visual C# | -platform (параметры компилятора C#) |
Visual C++ | Вы можете создавать приложения, не зависящие от платформы, общих промежуточных языков (CIL), с помощью /clr:safe. Дополнительные сведения см. в разделе -clr (компиляция среды CLR). Visual C++ содержит отдельные компиляторы для каждой 64-разрядной операционной системы. Дополнительные сведения об использовании Visual C++ для создания приложений, выполняемых как собственные в 64-разрядной операционной системе Windows, см. в разделе 64-разрядное программирование. |
Определение состояния EXE- или DLL-файлов
Чтобы определить, будет ли EXE- или DLL-файл выполняться только на определенной платформе или в эмуляторе WOW64, воспользуйтесь средством преобразования CorFlags (CorFlags.exe). Кроме того, программа CorFlags.exe используется для изменения состояния платформы EXE- или DLL-файла. В заголовке среды CLR сборки Visual Studio основной номер версии среды выполнения имеет значение 2, а дополнительный номер версии среды выполнения — значение 5. Приложения, у которых дополнительный номер версии среды выполнения имеет значение 0, обрабатываются как приложения прежних версий и всегда запускаются в эмуляторе WOW64.
Метод Module.GetPEKind используется для программного определения того, будет ли EXE- или DLL-файл выполняться на определенной платформе или в эмуляторе WOW64.