Why do we need to compile separate 32 and 64 bit versions?

Moving from 32 bit to 64 bit is a one way street.

32 bit systems are incapable of running 64 bit programs, simply because 264 is a far larger number than 232, meaning that even trying to compute a 64 bit program would cause all sorts of problems in a 32 bit system, with the outcome always being failure to operate. It's like trying to run code that has 256 or higher in binary on an 8 bit system (which has a max number of 255, or 8 1s if translated to binary).

As far as a 64 bit system running a 32 bit program, well there are problems there too. It isn't that the 64 bit system can't run the 32 bit program, but rather that it is extremely inefficient on computing power.

One of the big reasons 64 bit systems exist is that anything 32 bit has severe limitations thanks to how large and fast our computers are getting. a 32 bit system/program can only use a maximum of approx. 4 GB of RAM, meaning that no matter how much ram your 64 bit system has, a 32 bit program would be completely unable to use more than 4 gigs at a time because of its memory limitations.

On top of that, computing is bogged down when a 64 bit system has to constantly translate 32 bit information. Although it isn't significant per say, when you're already throttled on ram, any extra limitations will become ever more present and hindering to whatever is trying to be run.

TL;DR: 32 bit systems couldn't even comprehend what 64 bit is, never mind read a program from it. 64 bit can run 32 bit systems, but everything is throttled and really inefficient in computing efficiency.

/r/askscience Thread