One of the specific reasons why this can be difficult is that the sizes of the pointers will be different. Instead of a pointer occupying 32 bits, the pointer will now occupy 64 bits.
This is a problem if in software somewhere shoehorns a pointer to an int via reinterpret_cast in C ++ (which can happen at some really low level of code), and this happened because the size of the int and the pointer were the same size. Basically, the code assumed a certain size for the pointer.
Another way that can bite is a code crammed with magic numbers, for example 4 instead of sizeof(void*) , or 0xffffffff instead of INT_MAX or something like that.
There may not be a 64-bit version of the software if it depends on a library or feature that is not available in 64 bits. You cannot have an application that is part of 32 bits and 64 bits. For example, on Windows there is a function called SetWindowLong , which can only accept 32-bit data, so it is not very useful for 64-bit if the pointer should be passed to the function. That's why there is a function called SetWindowLongPtr , which can handle up to 64 bits in 64-bit programs and 32-bit in 32-bit programs.
Please note that Internet Explorer runs at 32 bits by default even in 64-bit windows, because a huge number of plug-ins for it are available only in 32-bit windows. A great example of this is the Adobe Flash Player , which is only available in 32-bit versions. Thus, apparently, even for a large company such as Adobe, porting to 64-bit may not always be trivial.
Bit change operations may be affected. For example, the bit offset 0x80000 remaining 10 times in 32 bits gives you 0x0 , but the bit offset 0x80000 remaining 10 times in 64 bits gives you 0x200000000 .
All that is said, there is no real technical reason why it is too difficult to port the application to 64-bit if the code was well written. The best scenario is a simple reconfiguration of the project and a complete overhaul - that's all you need.
The cynical side of me says that companies use this as a way to implement the planned obsolescence - to force or encourage people to update or buy the latest products!
In silico
source share