Производительность и потребление памяти в 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.