A maioria dos softwares funcionará da mesma maneira quando compilada para as arquiteturas Intel / AMD de 32 e 64 bits. No entanto, alguns softwares não. Além da preguiça ou do alcance de um público maior, existem algumas razões específicas pelas quais a recompilação como 64 bits não funcionará.
O software pode usar operações de ponteiro inseguras. Talvez um programa coloque um ponteiro em um int, que geralmente é de 32 bits para a maioria dos compiladores C e C ++. Os ponteiros são de 64 bits em um programa de 64 bits. Isso não funciona.
As operações de deslocamento de bits podem produzir resultados diferentes se o tipo inteiro usado for de tamanho diferente. Isso pode ser um problema ao usar um tipo de dados regular em vez de um typedef padrão, comoint32_t
Um tipo de dados usado em uma união pode mudar de tamanho, alterando o comportamento da união.
O software pode depender de bibliotecas apenas de 32 bits. Em geral, um programa de 64 bits funcionará apenas com bibliotecas de 64 bits devido a suposições sobre a pilha, ponteiros etc.
A dificuldade que você pergunta na sua pergunta é simplesmente que, em algumas bases de código, pode haver milhões de linhas de código que executam operações inseguras, fazem suposições inseguras, têm atalhos e "otimizações" inteligentes colocadas pelos desenvolvedores. O código não será compilado em um ambiente de 64 bits ou será compilado, mas terá erros de interrupção de exibição. Pode levar muito tempo para corrigir todos os problemas. Talvez uma empresa os conserte ao longo do tempo até que seja possível lançar uma versão de 64 bits. Talvez uma empresa desenvolva uma "versão 2" juntamente com os lançamentos de manutenção atuais, porque é necessária uma reescrita total.
A moral da história é escrever um código limpo e não tentar adivinhar o compilador ou adicionar otimizações inteligentes que não são necessárias, podem interromper o software e, provavelmente, não ajudarão.
Este artigo apresenta muito mais detalhes do que eu poderia incluir nesta resposta: 20 questões sobre como portar código C ++ na plataforma de 64 bits
sizeof(int)==sizeof(void*)