La mayoría del software funcionará igual cuando se compila para las arquitecturas Intel / AMD de 32 y 64 bits. Sin embargo, algunos programas no lo harán. Además de la pereza, o llegar a un público más amplio, hay algunas razones específicas por las que la recompilación como 64 bits no funcionará.
El software puede usar operaciones de puntero inseguras. Quizás un programa coloca un puntero en un int, que generalmente es de 32 bits para la mayoría de los compiladores de C y C ++. Los punteros son de 64 bits en un programa de 64 bits. Eso no funciona.
Las operaciones de desplazamiento de bits pueden producir resultados diferentes si el tipo entero que se utiliza es de un tamaño diferente. Esto puede ser un problema cuando se usa un tipo de datos regular en lugar de un tipo estándar definido comoint32_t
Un tipo de datos utilizado en una unión puede cambiar los tamaños, cambiando el comportamiento de la unión.
El software puede depender de bibliotecas que son solo de 32 bits. En general, un programa de 64 bits solo funcionará con bibliotecas de 64 bits debido a suposiciones sobre la pila, punteros, etc.
La dificultad que usted plantea en su pregunta es simplemente que en algunas bases de código puede haber millones de líneas de código que realizan operaciones inseguras, hacen suposiciones inseguras, tienen atajos y "optimizaciones" inteligentes implementadas por los desarrolladores. El código no se compilará en un entorno de 64 bits, o se compilará pero tendrá errores de show-stopper. Puede llevar mucho tiempo solucionar todos los problemas. Tal vez una compañía los arregle con el tiempo hasta que sea posible lanzar una versión de 64 bits. Tal vez una compañía desarrolle una "versión 2" junto con las versiones de mantenimiento actuales porque es necesaria una reescritura total.
La moraleja de la historia es escribir código limpio y no tratar de adivinar el compilador o agregar optimizaciones inteligentes que no son necesarias, pueden romper el software y, de todos modos, probablemente no ayuden.
Este artículo entra en mucho más detalle de lo que podría esperar incluir en esta respuesta: 20 problemas de portabilidad de código C ++ en la plataforma de 64 bits
sizeof(int)==sizeof(void*)