There is little/no difference in performance with running apps under WoW64. Indeed, there isn't even "emulation" required unless your computer is running an Itanium processor.
Why is this so, Scott?? I thought WoW64 was an emulation layer?
The answer to that is both Yes, and No. Let me explain: On a system with an x64 processor -
(which we all know contains the full x86 instruction set, plus extensions to make it 64 bit) - it matters not at all to the processor whether the code it's running is was written as 32 or 64 bit. It's all the same instruction set on the processor. So when your CPU runs the binaries, it doesn't know or care.
*IF* you have an Itanium based system, then an actual emulation layer is required because IA64 instructions are completely different from x64. So x64 has to be translated into IA64 before the processor can execute any code.
The key takeaway being that an x64 processor needs nothing special to run x86 or x64 binaries. For this situation, WoW64 really only has the infrastructure an emulator could use, but does not include a software emulator because it's not needed. Windows for Itanium does have an actual software emulator.
That takes care of the processor side.
It's different, of course, on an Operating System level. So what Microsoft do is include the
complete set of x86 DLL's (libraries) as part of their x64 operating systems. For the most part, these DLLs are *exactly* the same as the ones found in 32 bit windows. This does require a certain amount of jiggery~pokery for a small subset of libraries which have to share memory space or otherwise directly access components which "must" run natively in 64 bits. So for these, Microsoft wrote their own calling sequences which allow the OS to extend the calls to a 'native' 64 bit one. From there, the OS can play Traffic Cop and route 32 bit to 32 bit, and 64 to 64.
Basically, what it all means is that 64 bit Windows has 32 bit Windows inside.
Source:
http://msdn.microsoft.com/en-us/library/aa384274(v=VS.85).aspx
The WOW64 emulator runs in user mode. It provides an interface between the 32-bit version of Ntdll.dll and the kernel of the processor, and it intercepts kernel calls. The WOW64 emulator consists of the following DLLs:
•Wow64.dll provides the core emulation infrastructure and the thunks for the Ntoskrnl.exe entry-point functions.
•Wow64Win.dll provides thunks for the Win32k.sys entry-point functions.
•Wow64Cpu.dll is an interface library that abstracts characteristics of the host processor.
•(Intel Itanium only) IA32Exec.bin contains the x86 software emulator.
•(Intel Itanium only) Wowia32x.dll provides the interface between IA32Exec.bin and WOW64.
These DLLs, along with the 64-bit version of Ntdll.dll, are the only 64-bit binaries that can be loaded into a 32-bit process.
At startup, Wow64.dll loads the x86 version of Ntdll.dll and runs its initialization code, which loads all necessary 32-bit DLLs. Almost all 32-bit DLLs are unmodified copies of 32-bit Windows binaries. However, some of these DLLs are written to behave differently on WOW64 than they do on 32-bit Windows, usually because they share memory with 64-bit system components. All user-mode address space above the 32-bit limit is reserved by the system. For more information, see Performance and Memory Consumption under WOW64.
Instead of using the x86 system-service call sequence, 32-bit binaries that make system calls are rebuilt to use a custom calling sequence. This calling sequence is inexpensive for WOW64 to intercept because it remains entirely in user mode. When the custom calling sequence is detected, the WOW64 CPU transitions back to native 64-bit mode and calls into Wow64.dll. Thunking is done in user mode to reduce the impact on the 64-bit kernel and to reduce the risk of a bug in the thunk that might cause a kernel-mode crash, data corruption, or a security hole. The thunks extract arguments from the 32-bit stack, extend them to 64 bits, then make the native system call.