Brian R. Bondy About | Contact

HomeMain projectsArticlesResumeOther ResourcesHelp 

   
 
64-Bit Windows
(AMD and Intel with their own standards) 
 
 

Windows 64-Bit AMD and Intel processor rundown

I just purchased a new 64-Bit AMD computer and installed Windows 64-Bit AMD for the first time.

Here’s a short rundown on what I found out during my first night of using it.

There are 2 main types of 64-bit processors, Intel and AMD, and they run different versions of windows 64-bit.  I was very suprised by this.  That means that every driver built for Windows 64-Bit needs to be compiled twice.  You'd think that they would have agreed upon some kind of standard for this.  But I guess we're living in a world that continually supports more and more "standards".*

Intel’s first 64-bit processor was called the Itanium.  It was a huge flop because of problems with the way they did the caching.  It was replaced with the Itanium 2, which has a better design for cache.  Itanium 2 does not mean dual processors, but instead it means the 2nd design of Itanium (version 2).  It is referred to the Itanium 2 CPU. What a great marketing scheme, most people think they are buying a dual processor.

AMD’s 64-bit processor, is an extension to their x86, and can actually execute 32-bit code.  Intel’s 64-bit cannot do this, but does offer an emulation layer. 

Both AMD 64-bit and Intel 64-bit take advantage of something developed by windows included in their 64-bit operating system called Windows 32 on Windows 64 (WOW64). 

Which means that any 32-bit app will be able to run on 64-bit windows!

The same does not hold for 32-bit drivers though

On 64-bit machines there are actually 2 different registries.  A 32-bit registry and a 64-bit registry.  They are treated as different registries by 32-bit and 64-bit applications but the 32-bit registry is just a subkey for the 64-bit registry. Windows will automatically route an application to the proper registry depending on if it’s 32-bit or 64-bit.

Because of WOW64, any application that was compiled before on a 32-bit machine, will still work in 64-bit Windows.  This isn't because it supports it direclty, but because windows is using WOW64 to translate the 32-bit calls to 64-bit ones.  If however a program depends on a driver, or if it integrates with the windows shell, then that program will no longer work.  I beleive IPC is also translated on the fly by WOW64.

Some other useful information.

These 2 directories are both for 64-bit applications/drivers only.  Pretty great naming! :), but I'm sure it will save many headaches for inf file authors.

  • C:\Windows\System32\ 
  • C:\Program Files\


These 2 directories are for 32-bit apps and drivers only, they use 32-bit emulation

  • The directory C:\Windows\SysWOW64\
  • The directory C:\Program Files (x86)\

So developing for 64-bit machines can get a little tricky if you actually want it to run as a 64-bit program.  If it's running as a 32-bit program, then your ints will still be 4 bytes, and everything else you hold true will also still hold.  Right now, when I want to make a 64-bit program, I use a makefile instead of using Visual Studio directly.  You can use different NSIS .exes to generate the different installers. I suggest to build each project with 3 different versions of NSIS. Then if you want to, you can build a 32-bit installer wrapper that combines each of your installers.

* As Andrew S. Tannenbaum said  "The nice thing about standards is that there are so many to choose from."

 

slice logo