WOW64 下的性能和内存消耗取决于以下因素:
- 处理器硬件。 指令仿真在芯片上执行。 在 x64 处理器上,x86 指令由处理器本机执行。 因此,x64 上的 WOW64 下的执行速度与 32 位 Windows 下的速度相似。 在 Intel Itanium 处理器和任何 ARM64 处理器上,仿真涉及更多软件,因此性能会受到影响。
- API thunk 开销。 与对 NT 内核的系统调用相比,此开销很小。 NT 内核函数不常调用。
- 虚拟内存大小。 在 Intel Itanium 处理器上,如果同一 32 位应用程序的两个或多个实例同时运行,WOW64 会显著增加开销。 这是因为 Intel Itanium 上的本机 8 KB 页面使 x86 体系结构上本机 4 KB 页面的仿真复杂化(更多页面标记为可写;所有可写页面都专用于该过程)。 这可能会影响某些处理器上的终端服务的可伸缩性。 x64 处理器的情况并非如此。
- 工作集。 WOW64 会增加应用程序的工作集的大小。
WOW64 使 32 位应用程序能够利用 64 位内核。 因此,32 位应用程序可以使用大量内核句柄和窗口句柄。 但是,32 位应用程序可能无法在基于 x86 的系统本机运行时在 WOW64 下创建尽可能多的线程,因为 WOW64 为每个线程分配额外的 64 位堆栈(通常为 512 KB)。 此外,为 WOW64 本身和它使用的数据结构保留一些地址空间。 保留的金额取决于处理器;比 x64 或 ARM64 处理器上的 Intel Itanium 保留更多。
如果应用程序在映像标头中设置了 IMAGE_FILE_LARGE_ADDRESS_AWARE 标志,则每个 32 位应用程序在 WOW64 环境中接收 4 GB 的虚拟地址空间。 如果未设置 IMAGE_FILE_LARGE_ADDRESS_AWARE 标志,则每个 32 位应用程序在 WOW64 环境中接收 2 GB 的虚拟地址空间。