Sebagian besar perangkat lunak akan bekerja sama ketika dikompilasi untuk arsitektur Intel / AMD 32 dan 64 bit. Namun, beberapa perangkat lunak tidak akan melakukannya. Selain kemalasan, atau menjangkau khalayak yang lebih besar, ada beberapa alasan khusus mengapa kompilasi ulang sebagai 64 bit tidak akan berhasil.
Perangkat lunak dapat menggunakan operasi pointer yang tidak aman. Mungkin sebuah program menempatkan pointer ke int, yang umumnya 32 bit untuk sebagian besar kompiler C dan C ++. Pointer adalah 64 bit dalam program 64 bit. Itu tidak bekerja.
Operasi bit shift dapat menghasilkan hasil yang berbeda jika tipe integer yang digunakan adalah ukuran yang berbeda. Ini mungkin masalah ketika menggunakan tipe data biasa dan bukan tipe standar sepertiint32_t
Tipe data yang digunakan dalam serikat dapat mengubah ukuran, mengubah perilaku serikat.
Perangkat lunak mungkin bergantung pada perpustakaan yang hanya 32-bit. Secara umum, program 64 bit hanya akan bekerja dengan pustaka 64 bit karena asumsi tentang stack, pointer, dll.
Kesulitan yang Anda tanyakan dalam pertanyaan Anda adalah bahwa dalam beberapa basis kode mungkin ada jutaan baris kode yang melakukan operasi yang tidak aman, membuat asumsi yang tidak aman, memiliki pintasan dan "optimisasi" pintar yang dilakukan oleh pengembang. Kode tidak akan dikompilasi dalam lingkungan 64 bit, atau akan dikompilasi tetapi memiliki bug show-stopper. Mungkin perlu waktu lama untuk memperbaiki semua masalah. Mungkin perusahaan akan memperbaikinya dari waktu ke waktu sampai mungkin untuk merilis versi 64 bit. Mungkin perusahaan akan mengembangkan "versi 2" bersama rilis pemeliharaan saat ini karena penulisan ulang total diperlukan.
Moral dari cerita ini adalah untuk menulis kode yang bersih dan jangan mencoba menebak-nebak kompiler atau menambahkan optimisasi cerdas yang tidak diperlukan, dapat merusak perangkat lunak, dan mungkin tidak membantu juga.
Artikel ini jauh lebih terperinci daripada yang bisa saya harap sertakan dalam jawaban ini: 20 masalah porting kode C ++ pada platform 64-bit
sizeof(int)==sizeof(void*)