64-разрядные приложения64-bit Applications

При компиляции приложения можно указать, должно ли оно запускаться в 64-разрядной операционной системе Windows в качестве собственного приложения или в эмуляторе WOW64 (в 32- или 64-разрядной ОС Windows).When you compile an application, you can specify that it should run on a Windows 64-bit operating system either as a native application or under WOW64 (Windows 32-bit on Windows 64-bit). WOW64 — это среда совместимости, которая позволяет выполнять 32-разрядное приложение в 64-разрядной системе.WOW64 is a compatibility environment that enables a 32-bit application to run on a 64-bit system. Эмулятор WOW64 входит в состав всех 64-разрядных версий операционной системы Windows.WOW64 is included in all 64-bit versions of the Windows operating system.

Запуск 32- и 64-разрядных приложений в WindowsRunning 32-bit vs. 64-bit Applications on Windows

Все приложения, построенные на платформе .NET Framework версий 1.0 и 1.1, обрабатываются в 64-разрядной операционной системе как 32-разрядные приложения и всегда запускаются в эмуляторе WOW64 и в 32-разрядной среде CLR.All applications that are built on the .NET Framework 1.0 or 1.1 are treated as 32-bit applications on a 64-bit operating system and are always executed under WOW64 and the 32-bit common language runtime (CLR). 32-разрядные приложения, построенные на платформе .NET Framework 4.NET Framework 4 или более поздних версий, также выполняются в эмуляторе WOW64 в 64-разрядных системах.32-bit applications that are built on the .NET Framework 4.NET Framework 4 or later versions also run under WOW64 on 64-bit systems.

Visual Studio устанавливает на компьютер с архитектурой x86 32-разрядную версию среды CLR, а на компьютер с 64-разрядной ОС Windows — 32-разрядную и соответствующую 64-разрядную версию среды CLR.Visual Studio installs the 32-bit version of the CLR on an x86 computer, and both the 32-bit version and the appropriate 64-bit version of the CLR on a 64-bit Windows computer. (Так как среда Visual Studio является 32-разрядным приложением, то при установке в 64-разрядной системе она выполняется в эмуляторе WOW64.)(Because Visual Studio is a 32-bit application, when it is installed on a 64-bit system, it runs under WOW64.)

Примечание

Из-за особенностей эмуляции x86 и подсистемы WOW64 для процессоров семейства Itanium выполнение приложений ограничено одним процессором.Because of the design of x86 emulation and the WOW64 subsystem for the Itanium processor family, applications are restricted to execution on one processor. Эти факторы снижают производительность и масштабируемость 32-разрядных приложений .NET Framework, выполняемых в системах на базе Itanium.These factors reduce the performance and scalability of 32-bit .NET Framework applications that run on Itanium-based systems. Для повышения производительности и масштабируемости рекомендуем использовать версию .NET Framework 4.NET Framework 4, имеющую встроенную поддержку 64-разрядных систем на базе Itanium.We recommend that you use the .NET Framework 4.NET Framework 4, which includes native 64-bit support for Itanium-based systems, for increased performance and scalability.

При запуске 64-разрядного управляемого приложения в 64-разрядной операционной системе Windows по умолчанию можно создавать объекты размером не более 2 гигабайт (ГБ).By default, when you run a 64-bit managed application on a 64-bit Windows operating system, you can create an object of no more than 2 gigabytes (GB). Однако в .NET Framework 4.5.NET Framework 4.5 это ограничение можно повысить.However, in the .NET Framework 4.5.NET Framework 4.5, you can increase this limit. Дополнительные сведения см. в разделе <Элемент gcAllowVeryLargeObjects>.For more information, see the <gcAllowVeryLargeObjects> element.

Многие сборки выполняются в 32- и 64-разрядной среде CLR одинаково.Many assemblies run identically on both the 32-bit CLR and the 64-bit CLR. Однако в зависимости от версии среды CLR работа некоторых программ может отличаться по одной из следующих причин:However, some programs may behave differently, depending on the CLR, if they contain one or more of the following:

  • структуры, содержащие члены, размер которых меняется в зависимости от платформы (например, любой тип указателя);Structures that contain members that change size depending on the platform (for example, any pointer type).

  • Арифметика указателя, содержащая постоянные размеры.Pointer arithmetic that includes constant sizes.

  • Неверный вызов платформ или объявления СОМ, использующие дескрипторы Int32 вместо IntPtr.Incorrect platform invoke or COM declarations that use Int32 for handles instead of IntPtr.

  • приведение IntPtr к Int32.Code that casts IntPtr to Int32.

Дополнительные сведения о переносе 32-разрядного приложения в 64-разрядную среду CLR см. на странице Миграция 32-разрядного управляемого кода в 64-разрядную систему.For more information about how to port a 32-bit application to run on the 64-bit CLR, see Migrating 32-bit Managed Code to 64-bit.

Общие сведения о 64-разрядном программированииGeneral 64-Bit Programming Information

Общие сведения о 64-разрядном программировании см. в перечисленных ниже материалах.For general information about 64-bit programming, see the following documents:

Поддержка создания 64-разрядных приложений компиляторомCompiler Support for Creating 64-Bit Applications

Приложение, построенное с помощью .NET Framework на 32- или 64-разрядном компьютере, на 64-разрядном компьютере по умолчанию выполняется как собственное приложение (не в эмуляторе WOW64).By default, when you use the .NET Framework to build an application on either a 32-bit or a 64-bit computer, the application will run on a 64-bit computer as a native application (that is, not under WOW64). В таблице ниже перечислены материалы, в которых описывается использование компиляторов Visual Studio для создания 64-разрядных приложений, выполняемых как собственные, в эмуляторе WOW64 или обоими способами.The following table lists documents that explain how to use Visual Studio compilers to create 64-bit applications that will run as native, under WOW64, or both.

КомпиляторCompiler Параметр компилятораCompiler option
Visual BasicVisual Basic /platform (Visual Basic)/platform (Visual Basic)
Visual C#Visual C# /platform (параметры компилятора C#)/platform (C# Compiler Options)
Visual C++Visual C++ Вы можете создавать платформенно-независимые приложения MSIL с помощью /clr:safe.You can create platform-agnostic, Microsoft intermediate language (MSIL) applications by using /clr:safe. Дополнительные сведения см. в разделе /clr (компиляция CLR).For more information, see /clr (Common Language Runtime Compilation).

Visual C++ содержит отдельные компиляторы для каждой 64-разрядной операционной системы.Visual C++ includes a separate compiler for each 64-bit operating system. Дополнительные сведения об использовании Visual C++ для создания приложений, выполняемых как собственные в 64-разрядной операционной системе Windows, см. в разделе 64-разрядное программирование.For more information about how to use Visual C++ to create native applications that run on a 64-bit Windows operating system, see 64-bit Programming.

Определение состояния EXE- или DLL-файловDetermining the Status of an .exe File or .dll File

Чтобы определить, будет ли EXE- или DLL-файл выполняться только на определенной платформе или в эмуляторе WOW64, воспользуйтесь средством преобразования CorFlags (CorFlags.exe).To determine whether an .exe file or .dll file is meant to run only on a specific platform or under WOW64, use CorFlags.exe (CorFlags Conversion Tool) with no options. Кроме того, программа CorFlags.exe используется для изменения состояния платформы EXE- или DLL-файла.You can also use CorFlags.exe to change the platform status of an .exe file or .dll file. В заголовке среды CLR сборки Visual Studio основной номер версии среды выполнения имеет значение 2, а дополнительный номер версии среды выполнения — значение 5.The CLR header of a Visual Studio assembly has the major runtime version number set to 2 and the minor runtime version number set to 5. Приложения, у которых дополнительный номер версии среды выполнения имеет значение 0, обрабатываются как приложения прежних версий и всегда запускаются в эмуляторе WOW64.Applications that have the minor runtime version set to 0 are treated as legacy applications and are always executed under WOW64.

Метод Module.GetPEKind используется для программного определения того, будет ли EXE- или DLL-файл выполняться на определенной платформе или в эмуляторе WOW64.To programmatically query an .exe or .dll to see whether it is meant to run only on a specific platform or under WOW64, use the Module.GetPEKind method.