Why is it so hard to create a 64-bit version of an application?
Unfortunately, despite the seeming simplicity, it is often not enough just to rebuild a 32-bit program for a 64-bit platform and fix compiler errors to provide assured operability of the application being ported. The main issue of migrating to 64 bits is the presence of hidden 64-bit errors, i.e. cases when a code fragment that worked correctly in the 32-bit version causes errors in the 64-bit version.
Most often 64-bit errors occur in the following code fragments:
- code based on incorrect assumptions about types' sizes (for instance, on the assumption that the pointer's size is always 4 bytes);
- code processing large arrays whose sizes exceed 2 Gbytes in 64-bit systems;
- code writing and reading data;
- code containing bit operations;
- code with complex address arithmetic;
- obsolete code;
You may read a detailed description of each error type in the article A Collection of Examples of 64-bit Errors in Real Programs. Although all the errors in code that reveal themselves while compiling the program for 64-bit systems are related to inaccurate compliance with C/C++ standards, no real project is secure from them.
Another issue of moving to a 64-bit platform is dependence of your application on the libraries that do not have 64-bit versions since combined use of a 64-bit program and a 32-bit library is impossible in Windows systems.
A detailed description of the migration process and estimate of time and cost of porting an application to a 64-bit platform are given in this article.
- Discussion at www.stackoverflow.com. Why is it so hard to make 64-bit versions of software?
- Andrey Karpov, Evgeniy Ryzhkov. Lesson 28. Estimating the cost of 64-bit migration of C/C++ applications