Apa perbedaan antara sistem 32-bit dan 64-bit?
Jika Anda telah menggunakan keduanya, perbedaan tajam apa yang Anda alami?
Apakah akan menjadi masalah untuk menggunakan program 32-bit pada sistem 64-bit dalam beberapa kasus?
64-bit
operating-systems
32-bit
computer-architecture
cpu-architecture
Mehper C. Palavuzlar
sumber
sumber
Jawaban:
Catatan: Jawaban ini berlaku untuk CPU PC berbasis x86 standar (Intel dan AMD) dan Windows (seperti biasanya dikonfigurasi untuk pengguna akhir). Chip 32-bit atau 64-bit lainnya, OS lain, dan konfigurasi OS lainnya dapat memiliki tradeoff yang berbeda.
Dari perspektif teknis, OS 64-bit memberi Anda:
Mengizinkan proses individual untuk mengatasi masing-masing lebih dari 4 GB RAM (dalam praktiknya, sebagian besar tetapi tidak semua OS 32-bit juga membatasi total RAM sistem yang dapat digunakan menjadi kurang dari 4 GB, bukan hanya maksimum per aplikasi).
Semua pointer mengambil 8 byte, bukan 4 byte. Efeknya pada penggunaan RAM minimal (karena Anda tidak mungkin memiliki aplikasi yang diisi dengan gigabytes pointer), tetapi dalam kasus teoritis terburuk, ini dapat membuat cache CPU dapat menampung 1/2 pointer sebanyak (membuat secara efektif 1/2 ukuran). Untuk sebagian besar aplikasi, ini bukan masalah besar.
Ada banyak register CPU untuk keperluan umum dalam mode 64-bit. Register adalah memori tercepat di seluruh sistem Anda. Hanya ada 8 dalam mode 32-bit dan 16 register tujuan umum dalam mode 64-bit. Dalam aplikasi komputasi ilmiah yang saya tulis, saya telah melihat peningkatan kinerja hingga 30% dengan mengkompilasi ulang dalam mode 64-bit (aplikasi saya benar-benar dapat menggunakan register tambahan).
Kebanyakan OS 32-bit benar-benar hanya membiarkan aplikasi individual menggunakan 2 GB RAM, bahkan jika Anda telah menginstal 4 GB. Ini karena 2 GB ruang alamat lainnya dicadangkan untuk berbagi data antar aplikasi, dengan OS, dan untuk berkomunikasi dengan driver. Windows dan Linux akan memungkinkan Anda menyesuaikan tradeoff ini menjadi 3 GB untuk aplikasi dan 1 GB dibagikan, tetapi ini dapat menyebabkan masalah untuk beberapa aplikasi yang tidak mengharapkan perubahan. Saya juga menduga itu mungkin melumpuhkan kartu grafis yang memiliki 1 GB RAM (tapi saya tidak yakin). OS 64-bit dapat memberikan aplikasi individual 32-bit lebih dekat ke 4 GB penuh untuk dimainkan.
Dari perspektif pengguna:
Kecepatan aplikasi biasanya lebih cepat untuk aplikasi 64-bit dalam OS 64-bit dibandingkan dengan versi aplikasi 32-bit pada OS 32-bit, tetapi sebagian besar pengguna tidak akan melihat kecepatan ini. Sebagian besar aplikasi untuk pengguna normal tidak benar-benar memanfaatkan register tambahan atau manfaatnya diseimbangkan dengan petunjuk yang lebih besar mengisi cache.
Jika Anda memiliki aplikasi penyimpanan memori (seperti editor foto, pemrosesan video, komputasi ilmiah, dll.), Jika Anda memiliki (atau dapat membeli) RAM lebih dari 3 GB, dan Anda bisa mendapatkan versi aplikasi 64-bit, pilihannya mudah: gunakan OS 64-bit.
Beberapa perangkat keras tidak memiliki driver 64-bit. Periksa motherboard Anda, semua kartu plug-in, dan semua perangkat USB sebelum beralih. Perhatikan bahwa pada awal Windows Vista, ada banyak masalah dengan driver. Saat ini keadaan umumnya lebih baik.
Jika Anda menjalankan begitu banyak aplikasi pada saat kehabisan RAM (biasanya Anda dapat mengetahui hal ini karena komputer Anda mulai sangat lambat dan Anda mendengar hard disk drive berderak), maka Anda akan menginginkan OS 64-bit (dan RAM yang cukup).
Anda dapat menjalankan aplikasi 32-bit (tetapi bukan driver) di Windows 64-bit tanpa masalah. Perlambatan terburuk yang saya ukur untuk aplikasi 32-bit di Windows 64-bit adalah sekitar 5% (artinya jika butuh 60 detik untuk melakukan sesuatu di Windows 32-bit, butuh paling banyak 60 * 1.05 = 65 detik dengan aplikasi 32-bit yang sama di Windows 64-bit).
Apa yang 32-bit vs 64-bit tidak tidak menyiratkan:
Pada sistem x86, 32-bit vs 64-bit secara langsung mengacu pada ukuran pointer. Itu saja.
Itu tidak merujuk pada ukuran
int
tipe C. Itu diputuskan oleh implementasi kompiler tertentu, dan sebagian besar kompiler populer memilih 32-bitint
pada sistem 64-bit.Itu tidak secara langsung merujuk pada ukuran register non-pointer normal. Namun, penggunaan register aritmatika 64-bit kebetulan mengharuskan aplikasi dan OS juga berjalan dalam mode pointer 64-bit.
Itu tidak secara langsung merujuk pada ukuran bus alamat fisik. Sebagai contoh, sebuah sistem dengan garis cache lebar 64 bit dan maksimum memori 512GiB hanya membutuhkan 33 bit dalam bus alamatnya (yaitu
log2(512*1024**3) - log2(64) = 33
).Itu tidak merujuk pada ukuran bus data fisik: itu lebih terkait dengan biaya pembuatan (jumlah pin di soket CPU) dan ukuran garis cache.
sumber
Pada dasarnya Anda dapat melakukan segalanya untuk skala yang lebih besar:
2 tipe besar arsitektur 64-bit adalah arsitektur x64 dan IA64. Tapi x64 adalah yang paling populer sejauh ini.
x64 dapat menjalankan perintah x86 dan juga perintah x64. IA64 juga menjalankan perintah x86, tetapi ia tidak melakukan ekstensi SSE. Ada perangkat keras yang didedikasikan untuk Itanium untuk menjalankan instruksi x86; ini adalah emulator, tetapi dalam perangkat keras.
Seperti yang disebutkan oleh @Phil, Anda bisa melihat lebih dalam tentang cara kerjanya di sini .
sumber
Dampak terbesar yang orang akan perhatikan saat ini adalah bahwa PC 32-bit hanya dapat mengatasi memori maksimum 4GB. Ketika Anda melepas memori yang dialokasikan untuk penggunaan lain oleh sistem operasi, PC Anda mungkin hanya akan menampilkan sekitar 3,25GB memori yang dapat digunakan. Pindah ke 64bit dan batas ini menghilang.
Jika Anda melakukan pengembangan serius maka ini bisa sangat penting. Coba jalankan beberapa mesin virtual dan Anda segera kehabisan memori. Server lebih cenderung membutuhkan memori tambahan sehingga Anda akan menemukan bahwa penggunaan 64bit jauh lebih besar pada server daripada desktop. Hukum Moore memastikan bahwa kita akan memiliki lebih banyak memori pada mesin dan pada beberapa titik desktop juga akan beralih ke 64bit sebagai standar.
Untuk penjelasan yang jauh lebih rinci tentang perbedaan prosesor, lihat artikel hebat ini dari ArsTechnica .
sumber
Tidak ada yang gratis: walaupun aplikasi 64-bit dapat mengakses lebih banyak memori daripada aplikasi 32-bit, kekurangannya adalah mereka membutuhkan lebih banyak memori. Semua pointer yang dulunya membutuhkan 4 byte, sekarang mereka membutuhkan 8. Misalnya, persyaratan default di Emacs adalah 60% lebih banyak memori ketika itu dibangun untuk arsitektur 64-bit. Jejak ekstra ini merusak kinerja pada setiap level hirarki memori: executable yang lebih besar membutuhkan waktu lebih lama untuk memuat dari disk, set kerja yang lebih besar menyebabkan lebih banyak paging dan objek yang lebih besar berarti lebih sedikit kecocokan dalam cache prosesor. Jika Anda berpikir tentang CPU dengan cache 16K L1, aplikasi 32-bit dapat bekerja dengan 4096 pointer sebelum hilang dan pergi ke cache L2 tetapi aplikasi 64-bit harus mencapai cache L2 setelah hanya 2048 pointer.
Pada x64 ini dimitigasi oleh perbaikan arsitektur lain seperti register lebih banyak, tetapi pada PowerPC jika aplikasi Anda tidak dapat menggunakan> 4G itu kemungkinan akan berjalan lebih cepat pada "ppc" daripada "ppc64". Bahkan pada Intel ada beban kerja yang berjalan lebih cepat pada x86, dan beberapa menjalankan lebih dari 5% lebih cepat pada x64 daripada x86.
sumber
OS 64-bit dapat menggunakan lebih banyak RAM. Itu saja, dalam praktiknya. Vista / 7 64-bit menggunakan fitur keamanan yang lebih bagus untuk tempat mereka menempatkan komponen vital dalam RAM, tapi itu tidak terlalu 'terlihat'.
Dari ChrisInEdmonton:
sumber
Tidak yakin saya bisa menjawab semua pertanyaan Anda tanpa menulis seluruh esai (selalu ada Google ...), tetapi Anda tidak perlu mendesain aplikasi Anda secara berbeda untuk 64bit. Saya kira apa yang dimaksud adalah bahwa Anda harus memperhatikan hal-hal seperti ukuran pointer tidak lagi sama dengan int. Dan Anda memiliki banyak masalah potensial dengan asumsi bawaan pada jenis data tertentu yang panjangnya empat byte yang mungkin tidak lagi benar.
Ini kemungkinan akan menambah semua hal dalam aplikasi Anda - mulai dari menyimpan / memuat dari file, iterasi melalui data, penyelarasan data, hingga operasi bitwise pada data. Jika Anda memiliki basis kode yang sudah Anda coba porting, atau bekerja pada keduanya, kemungkinan Anda akan memiliki banyak gangguan kecil untuk dikerjakan.
Saya pikir ini adalah masalah implementasi, bukan yang desain. Yaitu saya pikir "desain" katakanlah, paket pengeditan foto akan sama apa pun ukurannya. Kami menulis kode yang mengkompilasi ke versi 32bit dan 64bit, dan desainnya tentu tidak berbeda antara keduanya - ini adalah basis kode yang sama.
"Masalah besar" mendasar pada 64bit adalah Anda mendapatkan akses ke ruang alamat memori yang jauh lebih besar daripada 32bit. Ini berarti Anda benar-benar dapat memasukkan lebih dari 4Gb memori ke komputer Anda dan benar-benar membuatnya membuat perbedaan.
Saya yakin jawaban lain akan masuk ke rincian dan manfaat lebih dari saya.
Dalam hal mendeteksi perbedaan maka secara programatik Anda cukup memeriksa ukuran pointer (mis. Sizeof (void *)). Jawaban 4 berarti 32 bit, dan 8 berarti Anda menjalankan dalam lingkungan 64bit.
sumber
Proses 32 Bit memiliki ruang alamat virtual 4 GB; ini mungkin terlalu sedikit untuk beberapa aplikasi. Aplikasi 64 Bit memiliki ruang alamat yang hampir tidak terbatas (tentu saja terbatas, tetapi Anda kemungkinan besar tidak akan mencapai batas ini).
Di OSX ada keuntungan lain. Lihat artikel berikut , mengapa menjalankan kernel di ruang alamat 64 Bit (terlepas dari apakah aplikasi Anda menjalankan 64 atau 32) atau membiarkan aplikasi Anda berjalan di ruang alamat 64 Bit (saat kernel masih 32 Bit) mengarah ke kinerja yang jauh lebih baik. Untuk meringkas: Jika salah satu 64 Bit (kernel atau aplikasi, atau keduanya tentu saja), TLB ("terjemahan lookaside buffer") tidak harus memerah setiap kali Anda beralih dari kernel untuk menggunakan ruang dan kembali (yang akan mempercepat akses RAM).
Anda juga mendapatkan keuntungan kinerja saat bekerja dengan variabel "long long int" (variabel 64 Bit seperti uint64_t). CPU 32 Bit dapat menambah / membagi / mengurangi / mengalikan dua nilai 64 Bit, tetapi tidak dalam satu operasi perangkat keras. Alih-alih perlu membagi operasi ini menjadi dua (atau lebih) operasi 32 Bit. Jadi aplikasi yang banyak bekerja dengan angka 64 Bit akan memiliki kecepatan memperoleh kemampuan untuk melakukan matematika 64 Bit langsung di perangkat keras.
Terakhir, arsitektur x86-64 menawarkan register lebih banyak daripada arsitektur x86 klasik. Bekerja dengan register jauh lebih cepat daripada bekerja dengan RAM dan semakin banyak register yang dimiliki CPU, semakin jarang perlu menukar nilai register ke RAM dan kembali ke register.
Untuk mengetahui apakah CPU Anda dapat berjalan dalam mode 64 Bit, Anda dapat melihat berbagai variabel sysctl. Misalnya buka terminal dan ketik
Jika mencantumkan EM64T, CPU Anda mendukung ruang alamat 64 Bit sesuai dengan standar x86-64. Anda juga bisa mencarinya
Jika dikatakan 1 (true / enabled), CPU Anda mendukung mode x86-64 Bit, jika dikatakan 0 (false / disable), itu tidak. Jika pengaturan tidak ditemukan sama sekali, anggap itu salah.
Catatan: Anda juga dapat mengambil variabel sysctl dari dalam aplikasi C asli, tidak perlu menggunakan alat baris perintah. Lihat
sumber
Perhatikan bahwa addressspace dapat digunakan untuk lebih dari memori (nyata). Seseorang juga dapat memetakan file besar dengan memori, yang dapat meningkatkan kinerja dalam pola akses yang lebih aneh karena caching level VM level-blok yang lebih kuat dan efisien juga masuk. Lebih aman untuk mengalokasikan blok memori besar pada 64-bit karena heapmanager kurang kemungkinan akan mengalami fragmentasi alamat-ruang yang tidak akan memungkinkannya mengalokasikan blok besar.
Beberapa hal yang dikatakan di utas ini (seperti pengganda # register) hanya berlaku untuk x86-> x86_64, tidak untuk 64-bit secara umum. Sama seperti fakta bahwa di bawah x86_64 satu dijamin memiliki SSE2, 686 opcodes dan cara murah untuk melakukan PIC. Fitur-fitur ini tidak hanya tentang 64-bit, tetapi tentang memotong warisan dan memperbaiki batasan x86 yang diketahui
Selain itu cukup sering orang menunjuk penggandaan register sebagai penyebab percepatan, sementara itu lebih mungkin penggunaan SSE2 default yang melakukan trik (mempercepat memcpy dan fungsi serupa). Jika Anda mengaktifkan set yang sama untuk x86 perbedaannya jauh lebih kecil. (*) (***)
Juga perlu diingat bahwa sering ada penalti awal yang terlibat karena struktur data rata-rata akan meningkat hanya karena ukuran pointer lebih besar. Ini juga memiliki efek cache, tetapi lebih signifikan terlihat pada kenyataan bahwa rata-rata memcpy () (atau apa pun yang setara dengan salinan memori dalam bahasa Anda) akan memakan waktu lebih lama. Ini hanya dalam besaran beberapa persen btw, tetapi speedup yang disebutkan di atas juga dalam besaran itu.
Biasanya overhead alignment juga lebih besar pada arsitektur 64-bit (catatan sebelumnya 32-bit hanya sering menjadi campuran dari nilai 32-bit dan 64-bit), meledakkan struktur lebih banyak lagi.
Secara keseluruhan, tes sederhana saya menunjukkan bahwa mereka akan secara kasar membatalkan satu sama lain, jika driver dan pustaka runtime telah sepenuhnya beradaptasi, tidak memberikan perbedaan kecepatan yang signifikan untuk aplikasi rata-rata. Namun beberapa aplikasi tiba-tiba bisa menjadi lebih cepat (misalnya ketika bergantung pada AES) atau lebih lambat (struktur data penting terus bergerak / dipindai / berjalan dan mengandung banyak petunjuk). Namun pengujian dilakukan pada Windows, dan optimalisasi PIC tidak menjadi patokan.
Perhatikan bahwa sebagian besar bahasa JIT-VM (Java, .NET) menggunakan pointer secara signifikan lebih banyak rata-rata (secara internal) daripada misalnya C ++. Mungkin penggunaan memori mereka meningkat lebih dari pada program rata-rata, tapi saya tidak berani menyamakannya langsung dengan efek yang melambat (karena ini adalah binatang yang benar-benar kompleks dan funky dan sering sulit diprediksi tanpa pengukuran)
Windows 64-bit secara default menggunakan SSE2 untuk floating point yang tampaknya mempercepat operasi sederhana dan memperlambat operasi kompleks (sin, cos dll).
(*) fakta yang sedikit diketahui adalah bahwa jumlah register SSE juga berlipat ganda dalam mode 64-bit
(**) Dr Dobbs punya artikel bagus tentang itu beberapa tahun yang lalu.
sumber
Selain masalah ruang memori yang jelas yang kebanyakan orang sebutkan di sini, saya pikir perlu melihat gagasan "komputasi kata kunci" yang Knuth (antara lain) telah bicarakan belakangan ini. Ada banyak efisiensi yang bisa diperoleh melalui manipulasi bit, dan operasi bitwise pada kata 64-bit jauh lebih maju daripada kata 32-bit. Singkatnya, Anda dapat melakukan lebih banyak operasi dalam register tanpa harus menekan memori, dan dari perspektif kinerja, itu adalah kemenangan yang sangat besar.
Lihatlah Volume 4, pra-Fascicle 1A untuk beberapa contoh trik keren yang saya bicarakan.
sumber
Selain kemampuan untuk mengatasi lebih banyak memori, x86_64 juga memiliki lebih banyak register yang memungkinkan kompiler menghasilkan kode yang lebih efisien. Peningkatan kinerja biasanya akan cukup kecil.
Arsitektur x86_64 kompatibel dengan x86. Dimungkinkan untuk menjalankan sistem operasi 32-bit yang tidak dimodifikasi. Dimungkinkan juga untuk menjalankan perangkat lunak 32-bit yang tidak dimodifikasi dari OS 64-bit. Itu akan membutuhkan semua perpustakaan 32-bit yang biasa. Mereka mungkin perlu diinstal secara terpisah.
sumber
Utas ini sudah terlalu lama, tapi ...
Sebagian besar balasan berfokus pada fakta bahwa Anda memiliki ruang alamat yang lebih besar, 64-bit, sehingga Anda dapat menangani lebih banyak memori. Untuk sekitar 99% dari semua aplikasi, ini sama sekali tidak relevan. Teriakan besar.
The nyata Alasan 64-bit yang baik adalah tidak bahwa register lebih besar, tetapi ada dua kali lebih banyak dari mereka! Itu berarti bahwa kompiler dapat menyimpan lebih banyak nilai Anda dalam register daripada menumpahkannya ke memori dan memuatnya kembali dalam beberapa instruksi nanti. Jika dan ketika kompilator pengoptimal membuka gulungan Anda, Anda dapat membuka gulungannya kira-kira dua kali lipat, yang benar-benar dapat membantu kinerja.
Juga, konvensi penelepon / callee subrutin untuk 64-bit telah didefinisikan untuk menjaga sebagian besar parameter yang disahkan dalam register alih-alih penelepon mendorongnya ke stack dan callee menghapusnya.
Jadi aplikasi C / C ++ "tipikal" akan mendapatkan peningkatan kinerja sekitar 10% atau 15% hanya dengan mengkompilasi ulang untuk 64-bit. (Dengan asumsi beberapa bagian dari aplikasi dihitung terikat. Tentu saja, ini tidak dijamin; Semua komputer menunggu kecepatan yang sama. Mileage Anda Mungkin Bervariasi.)
sumber
Terlepas dari keuntungan yang telah disebutkan di sini, ada beberapa lagi tentang keamanan:
Keuntungan lain yang terlintas dalam pikiran adalah bahwa jumlah memori bersebelahan virtual yang dialokasikan
vmalloc()
dalam kernel Linux bisa lebih besar dalam mode 64 bit.sumber
Dengan mesin 32-bit Anda hanya memiliki 4.294.967.295 byte memori yang harus diatasi. Dengan mesin 64-bit, Anda memiliki memori 1,84467441 × 10 ^ 19 byte.
Wikipedia mengatakan ini
sumber
Kutipan dari Microsoft.com:
sumber
Kristof dan Poshi telah menyatakan perbedaan teknis utama antara OS 32 dan 64 bit, pengalaman pengguna biasanya jauh berbeda dari teori. Versi konsumen 64 bit Windows sampai saat ini (XP dan Vista) memiliki lubang besar menganga dalam dukungan driver mereka. Saya memiliki banyak printer, pemindai, dan perangkat eksternal lainnya tidak berfungsi dengan versi 64 bit yang berfungsi baik dengan versi 32 bit. Ini adalah perangkat yang memiliki driver 64 bit dan mereka masih tidak akan berfungsi. Pada titik ini saya akan merekomendasikan Anda menjauh dari apa pun berbasis konsumen yang 64 bit dari Microsoft sampai Anda mendengar tentang bagaimana Windows 7 menangani ini, dari pengguna akhir nyata, bukan hanya uber-geeks yang saat ini memiliki akses ke sana. Berikan setidaknya 6 bulan dan lihat apa yang orang alami.
sumber
Beberapa program permainan menggunakan representasi papan bit . Catur, catur dan othello misalnya memiliki papan 8x8, yaitu 64 kotak, sehingga memiliki setidaknya 64 bit dalam kata mesin secara signifikan membantu kinerja.
Saya ingat pernah membaca tentang program catur yang 64-bit build-nya hampir dua kali lebih cepat dari versi 32-bit.
sumber
Istilah 32-bit dan 64-bit mengacu pada cara prosesor komputer (juga disebut CPU), menangani informasi. Versi 64-bit Windows menangani sejumlah besar memori akses acak (RAM) lebih efektif daripada sistem 32-bit.
Kecepatan mungkin berbeda menurut saya
sumber
Hal lain mengenai Microsoft Windows adalah bahwa selama bertahun-tahun telah ada Win32 API yang ditujukan untuk sistem operasi 32-bit dan tidak dioptimalkan untuk kompilasi 64 bit. Ketika saya menulis beberapa DLL untuk aplikasi saya, saya biasanya mengkompilasi di Win32 yang bukan versi 64 bit. Sebelum ke Vista, belum ada banyak versi Windows 64 bit yang berhasil, saya percaya di mana saya bekerja, mesin baru saya memiliki RAM 4 GB, tetapi saya masih menggunakan Windows XP Pro 32-bit karena dikenal sebagai stabil O / S relatif ke XP64 atau Vista.
Saya pikir Anda mungkin ingin juga melihat kembali ketika ada perubahan dari 16-bit ke 32-bit untuk beberapa rincian lebih lanjut tentang mengapa perubahan itu mungkin menjadi masalah besar bagi sebagian orang. Aplikasi mission-critical yang dapat dijalankan oleh perusahaan di desktop, misalnya paket akuntansi kecil, mungkin tidak berjalan pada sistem operasi 64-bit dan dengan demikian ada kebutuhan untuk menjaga mesin warisan tetap ada, virtual atau nyata.
Mengubah ukuran alamat dapat memiliki beberapa konsekuensi dan dampak besar.
sumber
Untuk tujuan paling praktis, Anda mungkin tidak akan melihat perbedaan.
Anda harus memiliki CPU 64-bit (kebanyakan CPU dalam beberapa tahun terakhir) untuk menginstal sistem operasi 64-bit.
Ada beberapa keuntungan untuk sistem operasi 64-bit:
Di sebagian besar skenario, program 64-bit menggunakan sedikit lebih banyak memori, tetapi untuk komputer pribadi, ini biasanya tidak diperhatikan.
sumber