Поделиться через


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

При компиляции приложения можно указать, что оно должно работать на 64-разрядной операционной системе Windows в качестве собственного приложения или под WOW64 (Windows 32-разрядная на Windows 64-разрядной). WOW64 — это среда совместимости, которая позволяет 32-разрядному приложению работать в 64-разрядной системе. WOW64 включается во все 64-разрядные версии операционной системы Windows.

Выполнение 32-разрядных и 64-разрядных приложений в Windows

32-разрядные приложения, созданные на платформе .NET Framework 4 или более поздних версий, выполняются в WOW64 в 64-разрядных системах.

Примечание.

Из-за проектирования эмуляции x86 и подсистемы WOW64 для семейства процессоров Itanium приложения ограничены выполнением на одном процессоре. Эти факторы снижают производительность и масштабируемость 32-разрядных приложений .NET, работающих в системах на основе Itanium. Рекомендуется использовать .NET Framework 4 или более поздней версии, которая включает встроенную 64-разрядную поддержку систем на основе Itanium для повышения производительности и масштабируемости.

По умолчанию при запуске 64-разрядного управляемого приложения в 64-разрядной операционной системе Windows можно создать объект не более 2 гигабайт (ГБ). Однако в .NET Framework 4.5 и более поздних версий это ограничение можно увеличить. Дополнительные сведения см. в элементе< gcAllowVeryLargeObjects>.

Многие сборки выполняются одинаково в 32-разрядной среде CLR и 64-разрядной среде CLR. Однако некоторые программы могут вести себя по-разному в зависимости от среды CLR, если они содержат одно или несколько из следующих:

  • Структуры, содержащие элементы, изменяющие размер в зависимости от платформы (например, любого типа указателя).
  • Арифметика указателя, включающая размеры констант.
  • Неправильные вызовы платформы или объявления COM, которые используют Int32 для дескрипторов вместо IntPtr.
  • Код, который приводит IntPtr к Int32.

Дополнительные сведения о переносе 32-разрядного приложения для запуска в 64-разрядной среде CLR см. в статье Миграция 32-разрядного управляемого кода в 64-разрядную версию.

Общие 64-разрядные сведения о программировании

Общие сведения о 64-разрядном программировании см. в следующих документах:

Поддержка компилятора для создания 64-разрядных приложений

По умолчанию при использовании .NET для создания приложения на 32-разрядном или 64-разрядном компьютере приложение будет работать на 64-разрядном компьютере в качестве собственного приложения (то есть не под WOW64). В следующей таблице перечислены документы, объясняющие, как использовать компиляторы Visual Studio для создания 64-разрядных приложений, которые будут работать как собственные, в WOW64 или обоих.

Компилятор Параметр компилятора
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.exe (средство преобразования CorFlags) без параметров. Вы также можете использовать CorFlags.exe для изменения состояния платформы файла .exe или .dll файла. Заголовок CLR сборки Visual Studio имеет основной номер версии среды исполнения, равный 2, а дополнительный номер версии — 5. Приложения, у которых младшая версия среды выполнения установлена на 0, рассматриваются как устаревшие приложения и всегда запускаются в WOW64.

Чтобы программно запрашивать .exe или .dll, чтобы определить, предназначен ли он для запуска только на определенной платформе или в среде WOW64, используйте метод Module.GetPEKind.