I recently noticed that, in a 64 bit Windows OS most of the 32 bit applications can be installed. But in a 32 bit OS, most of the 64 bit applications cannot be installed. Why is it so ?
3 Answers
64-bit applications are compiled to take advantage of 64-bit registers in x86-64 processors, which also requires that the processor is running in the proper mode, and the OS API call word lengths match.
32-bit operating systems usually use protected mode, which only allows the use of 32-bit registers (e.g. EAX
, EBX
). On x86-64 processors, 64-bit compatibility is added as long mode, which 64-bit OS'es are run under.
Additionally, the 64-bit version of Windows includes the WoW64 compatibility layer that dynamically translates 32-bit API calls to the 64-bit equivalents, and switches the CPU between 32-bit protected and 64-bit long modes when the process is scheduled to be run.
Another interesting point that comes into play with 64-bit processors is hardware virtualization. Given the proper hardware support, one can sometimes run a virtual machine (e.g. using VirtualBox or VMWare) that contains a 64-bit guest OS, while the host OS is only 32-bit (again, given the availability of x86-64 hardware virtualization). For details on doing this with VirtualBox, see this section of the manual.
A 64 bit application requires resources that a 32 bit application cannot supply. It's sort of like putting a square peg into a round hole.
-
What resources exactly is that? The only difference I am aware of between a 32-bit application and a 64-bit application is the size of the registers used and perhaps specific instructions that only work in long mode.– RamhoundApr 4, 2014 at 18:23
-
-
@DanielRHicks - I am not exactly sure I would agree that using a 64-bit register is a resource. You can represent the same 64-bits of information with either 2 32-bit registers or 1 64-bit register. I guess my complaint with this answer is that its sort of vague.– RamhoundApr 4, 2014 at 20:12
-
So what do you think a "resource" is??? A register is a resource. Apr 4, 2014 at 20:29
-
@DanielRHicks - Alright. First I don't think its accurate to say that a 32-bit operating could not be modified to support 64-bit applications in the same way a 64-bit operating system supports 32-bit applications provided the actual CPU in question was a x86-64 product. So I think the entire statement is not only incorrect it also should be a comment. Of course based on your own comment I think you are just trolling me.– RamhoundApr 4, 2014 at 21:57
In addition, a 32 bit application can only allocate upto (max) 4 Gb of ram. Because 64 bit applicatations limitation is a lot higher (upto (max) 512 Gb of ram, there would be a problem if a 64 bit program needs to allocate more memory. The program would crash, and your computer would generate a BSoD stating it can't allocate the memory.