La maggior parte dei software funzionerà allo stesso modo quando compilata per entrambe le architetture Intel / AMD a 32 e 64 bit. Tuttavia, alcuni software non lo faranno. A parte la pigrizia o il raggiungimento di un pubblico più ampio, ci sono alcuni motivi specifici per cui ricompilare come 64 bit non funzionerà.
-
Il software potrebbe utilizzare operazioni di puntatore non sicure. Forse un programma mette un puntatore in un int, che è generalmente a 32 bit per la maggior parte dei compilatori C e C ++. I puntatori sono 64 bit in un programma a 64 bit. Non funziona.
-
Le operazioni di cambio bit possono produrre risultati diversi se il tipo intero utilizzato è di dimensioni diverse. Questo potrebbe essere un problema quando si utilizza un tipo di dati normale anziché un typedef standard come int32_t
-
Un tipo di dati utilizzato in un'unione può cambiare dimensioni, cambiando il comportamento dell'unione.
-
Il software può fare affidamento su librerie solo a 32 bit. In generale, un programma a 64 bit funzionerà solo con le librerie a 64 bit a causa di ipotesi su stack, puntatori, ecc.
La difficoltà che poni nella tua domanda è semplicemente che in alcune basi di codice ci possono essere milioni di righe di codice che eseguono operazioni non sicure, fanno ipotesi poco sicure, hanno scorciatoie e intelligenti "ottimizzazioni" inserite dagli sviluppatori. Il codice non verrà compilato in un ambiente a 64 bit, o verrà compilato ma con bug di tipo "show-stopper". Potrebbe essere necessario molto tempo per risolvere tutti i problemi. Forse una società li risolverà nel tempo fino a quando non sarà possibile rilasciare una versione a 64 bit. Forse una società svilupperà una "versione 2" insieme alle attuali versioni di manutenzione perché è necessaria una riscrittura totale.
La morale della storia è scrivere codice pulito e non cercare di indovinare il compilatore o aggiungere intelligenti ottimizzazioni che non sono necessarie, possono rompere il software e probabilmente non aiutano comunque.
Questo articolo va molto più in dettaglio di quanto potrei sperare di includere in questa risposta: 20 problemi di porting del codice C ++ su la piattaforma 64-bit