Perbedaan antara perangkat lunak 32 bit dan perangkat lunak 64 bit adalah ukuran pointer, dan mungkin ukuran register integer. Itu dia.
Itu berarti semua petunjuk dalam program Anda berukuran dua kali lipat. Dan (setidaknya pada arsitektur ILP32 / LP64) ukuran Anda long
juga dua kali lipat. Ini biasanya berhasil sekitar 30% peningkatan dalam ukuran kode objek. Ini berarti bahwa ...
- kode objek Anda akan memakan waktu ~ 30% lebih lama untuk memuat dari disk ke RAM
- kode objek Anda akan memakan ~ 30% lebih banyak ruang dalam memori
- Anda telah secara efektif menurunkan bandwidth memori Anda (untuk kode objek) sebesar ~ 20%
- Anda telah secara efektif menurunkan ukuran cache instruksi hingga ~ 20%
Ini memiliki efek negatif yang tidak dapat diabaikan pada kinerja.
Melakukan ini hanya masuk akal jika Anda dapat "membeli kembali" biaya kinerja itu entah bagaimana. Pada dasarnya, ada dua cara untuk melakukan ini: Anda melakukan banyak matematika integer 64 bit, atau Anda membutuhkan lebih dari 4 GiByte memetakan memori. Jika salah satu atau keduanya benar, masuk akal untuk menggunakan perangkat lunak 64 bit, sebaliknya tidak.
Catatan: ada beberapa arsitektur di mana tidak ada varian 32 atau 64 bit yang sesuai. Kalau begitu, pertanyaannya jelas tidak masuk akal. Yang paling terkenal adalah IA64, yang hanya 64 bit dan tidak memiliki varian 32 bit, dan x86 / AMD64 yang, meskipun berkaitan erat, arsitektur yang berbeda , x86 menjadi 32 bit saja, AMD64 menjadi 64 bit saja.
Sebenarnya, pernyataan terakhir itu tidak 100% benar lagi. Linux baru-baru ini menambahkan ABI x32, yang memungkinkan Anda untuk menjalankan kode AMD64 dengan pointer 32 bit, jadi meskipun itu bukan arsitektur CPU yang "tepat", itu adalah cara menggunakan arsitektur AMD64 sedemikian rupa seolah-olah itu asli Varian 32 bit. Hal ini dilakukan justru karena kinerja overhead yang saya sebutkan di atas menyebabkan nyata terukur, masalah kuantitatif bagi pengguna dunia nyata menjalankan kode dunia nyata dalam sistem dunia nyata.