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-разрядном программировании см. в перечисленных ниже материалах.

Поддержка создания 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.