32 bit yazılım ve 64 bit yazılım arasındaki fark, işaretçilerin boyutu ve belki de tamsayı yazmaçların boyutudur. Bu kadar.
Bu, programınızdaki tüm işaretçilerin boyutunun iki katı olduğu anlamına gelir. Ve (en azından bir ILP32 / LP64 mimarisinde) long
s de iki katı büyüklüğünde. Bu genellikle nesne kodu boyutunda yaklaşık% 30 artışla sonuçlanır. Bu şu demek …
- nesne kodunuzun diskten RAM'e yüklenmesi ~% 30 daha uzun sürer
- nesne kodunuz bellekte ~% 30 daha fazla yer kaplar
- Hafıza bant genişliğini (nesne kodu için) etkin bir şekilde ~% 20 düşürdün.
- Öğretim önbelleğinin boyutunu etkili bir şekilde ~% 20 azaltdınız
Bunun performans üzerinde ihmal edilemez bir olumsuz etkisi var.
Bunu yapmak yalnızca, bu performans maliyetlerini bir şekilde "geri alabiliyorsanız" anlamlıdır. Temel olarak, bunu yapmanın iki yolu vardır: 64 bit tam sayı matematiği yaparsınız ya da 4'ten fazla GiByte haritalanmış belleğe ihtiyacınız vardır. Bunlardan biri veya her ikisi de doğruysa, 64 bit yazılımı kullanmak mantıklıdır, aksi halde olmaz.
Not: Karşılık gelen 32 veya 64 bit değişkenlerin olmadığı bazı mimariler var. Bu durumda, soru açıkça belli değil. En iyi bilinen, yalnızca 64 bit ve 32 bit varyantı olmayan IA64 ve yakından ilgili olsa da, farklı mimarilere sahip x86 / AMD64 , x86 sadece 32 bit, AMD64 ise sadece 64 bit idi.
Aslında, bu ikinci ifade artık% 100 doğru değil. Linux, yakın zamanda AMD64 kodunu 32 bitlik göstericilerle çalıştırmanıza izin veren x32 ABI'yi ekledi, bu yüzden "uygun" bir CPU mimarisi olmasa da, AMD64 mimarisini yerel gibi kullanmanın bir yoludur. 32 bit değişken. Bu tam yapılmadı çünkü ben yukarıda belirtilen performans havai neden oldu gerçek gerçek dünya sistemlerinde gerçek dünya kodunu çalıştıran gerçek dünya kullanıcıları için ölçülebilir, ölçülebilir problemleri.