Производительность и потребление памяти в WOW64

Производительность и потребление памяти в WOW64 определяются следующими факторами:

  • Оборудование процессора. Эмуляция инструкций выполняется на микросхеме. На процессоре x64 инструкции x86 выполняются процессором в собственном коде. Таким образом, скорость выполнения в WOW64 на x64 аналогична скорости выполнения в 32-разрядной Windows. В процессоре Intel Itanium и любых процессорах ARM64 больше программного обеспечения участвует в эмуляции, и в результате производительность страдает.
  • Затраты на API. Эти затраты небольшие по сравнению с системными вызовами ядра NT. Функции ядра NT предназначены для редкого вызова.
  • Размер виртуальной памяти. На процессоре Intel Itanium WOW64 добавляет значительные издержки, если одновременно выполняется два или более экземпляров одного 32-разрядного приложения. Это связано с собственными 8 КБ страниц в Intel Itanium, что усложняет эмуляцию собственных 4 КБ страниц в архитектуре x86 (дополнительные страницы помечены как записываемые; все доступные для записи страницы являются частными для процесса). Это может негативно повлиять на масштабируемость служб терминалов на определенных процессорах. Это не так для процессора x64.
  • Рабочий набор. WOW64 увеличивает размер рабочего набора приложения.

WOW64 позволяет 32-разрядным приложениям использовать 64-разрядное ядро. Поэтому 32-разрядные приложения могут использовать большее количество дескрипторов ядра и дескрипторов окон. Однако 32-разрядные приложения могут не создавать столько потоков в WOW64, сколько они могут при работе в системах на основе x86, так как WOW64 выделяет дополнительный 64-разрядный стек (обычно 512 КБ) для каждого потока. Кроме того, некоторый объем адресного пространства зарезервирован для самого WOW64 и структур данных, которые он использует. Зарезервированная сумма зависит от процессора; Больше зарезервировано на Процессоре Intel Itanium, чем на процессорах x64 или ARM64.

Если в заголовке образа установлен флаг IMAGE_FILE_LARGE_ADDRESS_AWARE , каждое 32-разрядное приложение получает 4 ГБ виртуального адресного пространства в среде WOW64. Если флаг IMAGE_FILE_LARGE_ADDRESS_AWARE не задан, каждое 32-разрядное приложение получает 2 ГБ виртуального адресного пространства в среде WOW64.