32 bit ve 64 bit sistemler


224

32 bit ve 64 bit sistemler arasındaki farklar nelerdir?

İkisini birden kullandıysanız, ne tür keskin farklar yaşadınız?

Bazı durumlarda 64 bit sistemlerde 32 bit programlar kullanmak sorun olur mu?


Burada ve web'de fiziksel adresleme (ram'a erişim) PEA'nın bunu etkilediği, ana kartın bunu etkilediği ve mantıksal adresleme (işlem başına sanal bellek) arasında birçok kafa karışıklığı var. 32 bit işletim sisteminde sanal bellek, çekirdeğin ayırdığı eksi 4GB ile sınırlıdır. 0,1 MB veya 8 GB RAM'e sahip olabilir ve tam olarak 4 GB sanal belleğe sahip olabilirsiniz (ancak bazıları çekirdeğe aittir). PEA, daha fazla RAM'e sahip olmak için kullanılabilir, ancak çekirdek hepsine erişemediğinden, mükemmel bir cevap değildir.
ctrl-alt-delor

Yanıtlar:


264

Not: Bu cevaplar standart x86 tabanlı PC işlemcileri (Intel ve AMD) ve Windows (genellikle son kullanıcılar için yapılandırıldığı şekilde) için geçerlidir. Diğer 32-bit veya 64-bit yongaları, diğer işletim sistemleri ve diğer işletim sistemi yapılandırmaları farklı değişimlere sahip olabilir.

Teknik açıdan bakıldığında, 64-bit bir işletim sistemi size verir:

  • Tek tek işlemlerin her biri için 4 GB'den fazla RAM adreslemesine izin verir (pratikte, çoğu, ancak 32 bit işletim sistemlerinin tümü değil, aynı zamanda toplam kullanılabilir sistem RAM'ını yalnızca uygulama başına maksimum değil, 4 GB'den daha az) sınırlar.

  • Tüm işaretçiler 4 bayt yerine 8 bayt alır. RAM kullanımı üzerindeki etkisi çok azdır (çünkü gigabaytlık işaretçilerle dolu bir uygulamanız olması muhtemel değildir), ancak en kötü teorik durumda, CPU önbelleğinin 1/2 kadar işaretçi alabilmesini sağlayabilir ( etkin boyutta 1/2). Çoğu uygulama için bu çok önemli bir şey değil.

  • 64 bit modunda daha birçok genel amaçlı CPU kaydı vardır. Kayıtlar tüm sisteminizdeki en hızlı hafızadır. 32 bit modunda yalnızca 8 ve 64 bit modunda 16 genel amaçlı kayıt vardır. Yazdığım bilimsel bilgi işlem uygulamalarında, 64 bit modunda yeniden derleyerek% 30'a varan bir performans artışı gördüm (uygulamam gerçekten fazladan kayıtları kullanabilirdi).

  • 32 bit işletim sistemlerinin çoğu, 4 GB yüklü olsa bile, bireysel uygulamaların yalnızca 2 GB RAM kullanmasına izin verir. Bunun nedeni, diğer 2 GB adres alanının uygulamalar arasında, işletim sistemi ile veri paylaşımı ve sürücülerle iletişim kurmak için ayrılmasıdır. Windows ve Linux, bu tradeoff'u uygulamalar için 3 GB ve paylaşılan 1 GB olarak ayarlamanıza izin verecektir, ancak bu değişiklik beklemeyen bazı uygulamalar için sorunlara neden olabilir. Ayrıca 1 GB RAM'e sahip bir grafik kartını sakatlayabileceğini de tahmin ediyorum (ancak emin değilim). 64 bit işletim sistemi, 32 bitlik uygulamaları tek başına 4 GB'a kadar oynayabilir.

Bir kullanıcının bakış açısından:

  • Uygulama hızı, 64 bit işletim sistemindeki 64 bit uygulama için, 32 bit işletim sistemindeki uygulamanın 32 bit sürümüne kıyasla daha hızlıdır, ancak çoğu kullanıcı bu hızlanmayı görmez. Normal kullanıcılar için çoğu uygulama, fazladan kayıtlardan gerçekten faydalanmamakta veya faydaları, önbelleği dolduran daha büyük işaretçiler ile dengelenmektedir.

  • Herhangi bir bellek domuz uygulamanız varsa (fotoğraf düzenleyicileri, video işleme, bilimsel bilgi işlem vb.), 3 GB'tan daha fazla RAM'e sahipseniz (veya satın alabilirseniz) ve uygulamanın 64 bit sürümünü alabilirsiniz, seçim kolaydır: 64 bit işletim sistemini kullanın.

  • Bazı donanımların 64 bit sürücüleri yoktur. Geçiş yapmadan önce ana kartınızı, tüm eklenti kartlarını ve tüm USB cihazlarını kontrol edin. Windows Vista'nın ilk günlerinde, sürücülerle ilgili birçok sorun olduğunu unutmayın. Bugünlerde işler genellikle daha iyi.

  • RAM'in tükeneceği bir zamanda çok fazla uygulama çalıştırıyorsanız (genellikle bilgisayarınız gerçekten yavaşlamaya başladığından ve sabit disk sürücüsünün çatladığını duyduğunuz için bunu söyleyebilirsiniz), o zaman 64-bit bir işletim sistemi isteyeceksinizdir. (ve yeterli RAM).

  • Sorunsuz bir şekilde 64 bit Windows'da 32 bit uygulamaları (ancak sürücüleri değil) çalıştırabilirsiniz. 64 bit Windows'da 32 bit bir uygulama için ölçtüğüm en kötü yavaşlama yaklaşık% 5'tir (yani, 32 bit Windows'da bir şey yapmak 60 saniye sürerse, en fazla 60 * 1.05 = 65 saniye sürdü) 64-bit Windows'ta aynı 32-bit uygulama).

64-bit'e karşı 32-bit ne demek değildir :

X86 sistemlerde, 32 bit ve 64 bit, doğrudan işaretçilerin boyutunu ifade eder. Bu kadar.

  • C inttipi büyüklüğüne işaret etmez . Buna belirli bir derleyici uygulaması tarafından karar verilir ve popüler derleyicilerin çoğu int64-bit sistemlerde 32-bit'i seçer .

  • Doğrudan işaretçi olmayan normal kayıtların boyutuna işaret etmez . Ancak, 64 bit aritmetik yazmaçların kullanımı, uygulamanın ve işletim sisteminin de 64 bit işaretçi modunda çalışmasını gerektirir.

  • Doğrudan fiziksel adres veri yolunun boyutuna işaret etmez . Örneğin, 64 bit genişliğinde önbellek hatlarına ve maksimum 512GiB belleğe sahip bir sistem adres veriyolunda yalnızca 33 bit gerektirir (örn. log2(512*1024**3) - log2(64) = 33).

  • Fiziksel veri yolunun boyutuna atıfta bulunmaz: bu daha çok üretim maliyetleri (CPU soketindeki pin sayısı) ve önbellek satırı boyutlarıyla ilgilidir.


8
Çok iyi cevap. Özellikle, aslında 4 gb RAM sınırı olmadığını, ancak bellek kullanım sınırını işlediğinizi belirttiğiniz için. Sadece bilginiz için, bu bağlantıya bir göz atmanız gerektiğini düşünüyorum: unawave.de/windows-7-tipps/32-bit-ram-barrier.html?lang=EN
Atılım

8
64 bit pencerelerde çalışmayan uygulamalardır: 16 bit uygulamalar / 32 bit veya işaretsiz çekirdek modu sürücüleri kullananlar. Benim gibi bir yazılım bağımlısı için çok şey var ...
fluxtendu

1
@flextendu, bu eski programların performans gereksinimleri göz önüne alındığında, neredeyse kesinlikle sanal bir makinede çalıştırabilirsiniz. VMware player, Virtual PC ve Virtual Box ile, 32bit Windows lisansınız varsa, bunlardan birini denememek için hiçbir sebep yoktur. Bununla uğraşmak istemiyorsanız, muhtemelen "Windows XP Mode" altında da çalışacaklardır.
Mark Booth,

6
BTW, 32 bit uygulamalar, bildirimlerinde belirli bir bayrak etkinleştirilmedikçe 2 GiB RAM'den fazla kullanmaz. Kaynak: blogs.technet.com/b/markrussinovich/archive/2008/11/17/…
Hello71

Evet, Hello71'in burada ele alınmayan oldukça önemli bir şeye çarptığına eminim: 32 bit uygulamaların çoğu hiçbir zaman doğrudan fazladan RAM'den yararlanmaz. Bence bu bahsetmeye değer, değil mi?
Django Reinhardt

107

Temel olarak her şeyi daha büyük bir ölçekte yapabilirsiniz:

  1. İşletim sistemi başına RAM: İşletim sistemi için x86'da 4GB RAM sınırı (çoğu zaman)
  2. İşlem başına RAM: İşlemler için x86'da 4GB RAM sınırı (her zaman). Bunun önemli olmadığını düşünüyorsanız, yoğun bir MSSQL veritabanı yoğun uygulama çalıştırmayı deneyin. Kullanabiliyorsanız ve çok daha iyi çalışırsanız> 4GB kendisini kullanır.
  3. Adresler: Adresler 32 bit yerine 64 bit olup, daha fazla bellek kullanan "daha büyük" programlara sahip olmanızı sağlar.
  4. Programlar için kullanılabilir tutamaçlar : Daha fazla dosya tutamaçları, işlemler oluşturabilirsiniz ... Windows x64'te örnek, işlem başına> 2000 iş parçacığı oluşturabilirsiniz, ancak x86'da birkaç yüze yakın bir değer oluşturabilirsiniz.
  5. Daha geniş programlar mevcut: Bir x64'ten hem x86 hem de x64 programlarını çalıştırabilirsiniz. (Örnek pencereler: wow64, windows64 öykünmesinde windows32)
  6. Öykünme seçenekleri: Bir x64'ten hem x86 hem de x64 VM'leri çalıştırabilirsiniz.
  7. Daha Hızlı: Bazı hesaplamalar 64 bit işlemcide daha hızlıdır
  8. Birden çok sistem kaynağının bölünmesi: Sistem kaynaklarını ayıran en az bir VM çalıştırmak istediğinizde çok fazla RAM belleği çok önemlidir.
  9. Özel programlar mevcut: Birkaç yeni program sadece x64'ü destekliyor. Örnek Exchange 2007.
  10. Gelecek eski x86 ?: Zaman geçtikçe daha fazla 64 bit kullanılacak ve daha fazla x86 kullanılmayacak. Böylece satıcılar sadece 64-bit daha fazla destekleyecektir.

2 büyük 64-bit mimarisi türü x64 ve IA64 mimarileridir. Ancak x64 bugüne kadar en popüler olanıdır.

x64, x86 komutlarını ve x64 komutlarını çalıştırabilir. IA64, x86 komutlarını da çalıştırır, ancak SSE uzantılarını yapmaz. X86 komutlarını çalıştırmak için Itanium'a özel donanım vardır; bu bir emülatör, fakat donanımda.

@Phil'in dediği gibi, burada nasıl çalıştığına dair daha derin bir bakış elde edebilirsiniz .


1
Um. IA64, x86 komutlarını çalıştırır. Yine de, SSE uzantıları yapmaz. X86 komutlarını çalıştırmak için Itanium'a özel donanım vardır; bu bir emülatör, fakat donanımda.
tzot

2
Birkaç yıl önce, Raymond Chen, 2000 başlıklı "limit" konusunu yayınladı
bk1e

Arstechnica’ya açıklamaları için çok fazla oy verin.
Avihu Turzion

2
4GB RAM limiti tam olarak doğru değil (ev kullanıcıları Windows sistemlerine getirilen yapay bir limit), PAE'yi kontrol edin . Güncel donanımda, bir Linux PAE çekirdeği (32bit için varsayılan olarak kullanılan) çekirdeği, 4 GB'den daha fazlasını karşılayabilir. Aynısı FreeBSD ve NetBSD için de geçerlidir.
Izzy,

32bit sistemler, bu "adresler" (3. punk) nedeniyle 4GB'tan (1. punk) daha fazlasını kullanamazlar. Yani 1. ve 3. yumrukların AYNI. 3. noktayı kaldırabilirsiniz. :)
Jet

46

İnsanların şu anda görecekleri en büyük etki, 32bit bir bilgisayarın yalnızca maksimum 4GB belleği ele alabilmesidir. İşletim sistemi tarafından diğer kullanımlar için tahsis edilmiş belleği çıkardığınızda, PC'niz muhtemelen sadece yaklaşık 3,25GB kullanılabilir bellek gösterecektir. 64bit'e geç ve bu limit kayboluyor

Ciddi gelişme yapıyorsanız o zaman bu çok önemli olabilir. Birkaç sanal makine çalıştırmayı deneyin; hafızanız azalıyor. Sunucular ekstra belleğe ihtiyaç duyarlar ve 64bit kullanımının sunucularda masaüstünden çok daha fazla olduğunu göreceksiniz. Moore yasaları, makineler hakkında daha fazla belleğe sahip olmamızı sağlıyor ve bu nedenle bir noktada masaüstleri de standart olarak 64bit'e geçecek.

İşlemci farklılıklarının daha ayrıntılı bir açıklaması için ArsTechnica'dan gelen bu mükemmel makaleye göz atın .


7
32-bit platform ve 4GB sınırlaması biraz yanlış bir işlemdir ve temel olarak bir işletim sistemi mimari tercihi / tasarım sınırıdır. Gerçekten, 32 bitlik 4 GB'lık bir işlem VA alanında gerçekten bir sınırda. Fiziksel adres, Intel 32-bit CPU'larda 36-bit'i destekliyor
Tall Jeff

1
Kesinlikle doğru olan iyi bir noktaya değindin. Ancak PC kullanıcılarının gerçek dünyasındaki etkisi, makinenin ödedikleri 4 GB’ın tamamını kullanmayacağıdır. Babam bu sorunu yaşadı ve hala parasını ödediği 4GB’nin tam olarak kullanılamayacağı konusunda kafası karışık.

2
Amacınıza değer verin, ancak düzeltmenin işlemcide olmadığı veya 64-bit olacağı fikrini kullanmaya çalışmak, biraz geliştirilmiş bir işletim sistemi tasarımından ibarettir. Bu, örneğin, Windows'un kurumsal sürümlerinde bile 32-bit sürümlerde ele alınmaktadır. 64GB RAM sağlar.
Uzun Jeff,

Teknik olarak, sınır kaybolmaz. Bir sonraki on yıl içinde herhangi bir zamanda bir makineye bu kadar RAM takmanın pratik / imkansız olduğu noktalara doğru ilerler.

Yukarıdaki PAE ile ilgili notuma bakın : 4GB sınırı tüm sistem için geçerli değil - yalnızca tek işlemler için geçerlidir (hiçbir işlem 4 GB'a ve üstüne erişemez - ancak tüm sistem, yani tüm işlemler birlikte PAE etkin olabilir) ). Bu nedenle, birisinin 4GB ve üstü (büyük video dosyalarına sahip video editörleri / dönüştürücüler gibi) ve 8GB + ' a erişmekten kâr elde eden uygulamaları olmadıkça , 32bit veya 64bit kullanıp kullanmadığı çok fazla fark etmemelidir.
Izzy,

31

Hiçbir şey serbesttir: 64 bit uygulamalar her ne kadar olabilir 32-bit uygulamalar daha fazla bellek erişmek, olumsuz onlar olmasıdır ihtiyaç daha fazla bellek. Eskiden 4 bayta ihtiyaç duyan tüm işaretçiler, şimdi 8'e ihtiyaç duyuyorlar. Örneğin, Emacs'taki varsayılan gereksinim 64 bitlik bir mimari için oluşturulduğunda% 60 daha fazla bellek. Bu ekstra ayak izi, bellek hiyerarşisinin her seviyesinde performansı düşürür: daha büyük çalıştırılabilir disklerden daha uzun sürebilir, daha büyük çalışma setleri daha fazla sayfalamaya neden olur ve daha büyük nesneler işlemci önbelleklerine daha az sığması anlamına gelir. 16K L1 önbelleğe sahip bir CPU düşünürseniz, 32 bitlik bir işaretçi L2 önbelleğini kaçırmadan ve kullanmadan önce 4096 işaretçi ile çalışabilir, ancak yalnızca 2048 işaretleyiciden sonra 64 bitlik bir uygulamanın L2 önbelleğe ulaşması gerekir.

X64'te bu, daha fazla yazmaç gibi diğer mimari gelişmelerle azaltılabilir, ancak uygulamanız> 4G kullanamıyorsa PowerPC'de "ppc" de "ppc64" den daha hızlı çalışması muhtemeldir. Intel'de bile x86'da daha hızlı çalışan ve x64'te x86'da% 5'ten daha hızlı çalışan iş yükleri var.


2
Bu cevap PowerPC64'ün x86-64 kadar iyi olmadığını göstermektedir. Gerçek şu ki, powerpc64, powerpc kırılmadığı için powerpc geliştirmedi.
ctrl-alt-delor 13:12

3
Linux şimdi, x86-64'ün tüm hız avantajlarına sahip (daha fazla kayıt yapan, yeniden tasarlanan ABI), ancak 32bit işaretçilerle bir x32 ABI'ye sahiptir. 64bit modunun yararlarının gerçek genişlik artışından değil, mimariyi geri tutan bagajın birçoğunu bırakma şansından kaynaklandığını gösteren +1. 64bit regs bazı uygulamalar için değere sahiptir, ancak 64bit pointer alanına daha az ihtiyaç duyulur.
Peter Cordes,

19

64 bit işletim sistemi daha fazla RAM kullanabilir. Bu konuda, pratikte. 64-bit Vista / 7, RAM'de hayati öneme sahip bileşenleri yerleştirmek için daha güvenli güvenlik özellikleri kullanır, ancak bu gerçekten 'farkedilir' değildir.

ChrisInEdmonton'dan:

PAE'li bir ix86 sistemindeki 32 bit işletim sistemi 64 GB RAM'e kadar hizmet verebilir. X86-64'teki 64 bit işletim sistemi 256 TB sanal adres alanına erişebilir, ancak sonraki işlemcilerde 16 EB'ye kadar yükseltilebilir. Bazı işletim sistemlerinin adres alanını daha da sınırladığını ve çoğu anakartın ek kısıtlamaları olacağını unutmayın.


4
Bir işletim sistemi için, SADECE 64-bit'e karşı 32-bit, işaretçilerin boyutunu belirtir (ilk paragrafınızın doğru bir şekilde tartıştığı). -1: Bazı işletim sistemleri varsayılan tamsayı boyutunu işaretçi boyutuna kilitlemeyi seçer, ancak ne Windows ne de Linux bunu yapmaz. Tamsayılı matematik hassasiyeti değişmedi. Yaygın olarak kullanılan NO, kayan nokta hassasiyetini değiştirmez (ikinci paragrafın iddia ettiği gibi). "float" veya "single" 32-bit, "double", işletim sisteminin 32-bit mi yoksa 64-bit işaretçi mi kullandığından bağımsız olarak 64-bit'tir.
Bay Fooz

Ah, açıkça yanılmışım, bunu temizlediğiniz için teşekkür ederim :)
Phoshi

Sorun değil. -1 -> +1
Mr Fooz

Ne kadar RAM'e erişilebileceğini belirtmek için cevabınızı düzenlemeye değer olabilir. PAE'li ix86 sistemindeki 32 bit işletim sistemi 64 GB RAM'e kadar hizmet verebilir. X86-64'teki 64 bit işletim sistemi 256 TB sanal adres alanına erişebilir, ancak sonraki işlemcilerde 16 EB'ye kadar yükseltilebilir. Bazı işletim sistemlerinin adres alanını daha da sınırladığını ve çoğu anakartın ek kısıtlamaları olacağını unutmayın.
ChrisInEdmonton

Ben numaralardır olarak, basit tutmak istedim çoğunlukla anda alakasız edecek kadar yüksek, ama şimdi onları sopa zarar veremezler.
Phoshi

14

Tüm sorularınızı bir makale yazmadan cevaplayabileceğimden emin değilim (her zaman Google var ...), ancak 64bit için uygulamalarınızı farklı tasarlamanıza gerek yok. Bahsedilen şey, işaretçi boyutları gibi şeylerin artık inçlerle aynı boyutta olmadığına dikkat etmeniz gerektiğidir. Ve artık doğru olmayabilecek dört bayt uzunluğundaki belirli veri türlerine ilişkin yerleşik varsayımlarla ilgili tüm potansiyel sorunlarınız var.

Bu, uygulamanızdaki her türlü şeyi tetikleyebilir - dosyadan kaydetme / yükleme, veri yineleme, veri hizalama, veri üzerinde bitsel işlemlere kadar her şey. Taşımaya çalıştığınız veya her ikisinde de çalıştığınız kod kodunuz varsa, üzerinde çalışacağınız çok sayıda küçük niggenin olması muhtemeldir.

Bunun tasarım meselesi yerine uygulama meselesi olduğunu düşünüyorum. Yani bence "tasarım", bir fotoğraf düzenleme paketi kelimesi ne olursa olsun aynı olacaktır. Hem 32bit hem de 64bit sürümleri için derlenen kodlar yazıyoruz ve tasarım kesinlikle ikisi arasında farklılık göstermiyor - aynı kod temeli.

64bit'teki temel "büyük anlaşma", 32bit'ten daha büyük bir bellek adres alanına erişim kazanmanızdır. Bu, bilgisayarınıza gerçekten 4 Gb'den fazla belleği takıp çıkarabileceğiniz ve gerçekten bir fark yaratabileceğiniz anlamına gelir.

Diğer cevapların benden daha fazla ayrıntıya ve yararlara gireceğinden eminim.

Aradaki farkı tespit etmek için programlayıcı olarak sadece bir işaretçinin boyutunu kontrol edin (örn. Sizeof (void *)). 4'ün yanıtı 32 bit ve 8 ise 64 bitlik bir ortamda çalıştığınız anlamına gelir.


4
Belirli işaretçi tiplerinin belirli integral tipleriyle aynı boyutta olduğunu varsayan rasgele programlar yazarsanız, rong açın. Bu uzun zamandır geçerliydi.
David Thornley

@David: Kesinlikle haklısın. Ne yazık ki, tam olarak bunu yapan bir ton kod var.

10

32 Bitlik bir işlemin 4 GB'lık sanal adres alanı vardır; bu, bazı uygulamalar için çok az olabilir. 64 Bit uygulamasında neredeyse sınırsız adres alanı vardır (elbette sınırlıdır, ancak büyük olasılıkla bu sınıra ulaşmazsınız).

OSX'te başka avantajlar da var. Bkz aşağıdaki makaleye 64 Bit adres alanında çekirdek koşmak zorunda neden (bağımsız uygulama 64 çalıştırır veya 32) veya (çekirdek hala 32 Bit iken) çok daha iyi performansa öncülük 64 Bit adres alanında uygulama çalıştırmak zorunda. Özetlemek gerekirse: Biri 64 Bit ise (çekirdek veya uygulama veya elbette her ikisi de), çekirdeği boşluk ve geri kullanmaya (hızlanacak) kullanmaya başladığınızda TLB'nin ("çeviri görünüm arabellek") temizlenmesi gerekmeyecektir RAM erişimi).

Ayrıca "long long int" değişkenleriyle çalışırken performans kazancı var (uint64_t gibi 64 Bit değişkenleri). Bir 32 Bit CPU, iki 64 Bit değeri ekleyebilir / bölebilir / çıkarabilir / çarpabilir, ancak tek bir donanım işleminde gerçekleştiremez. Bunun yerine, bu işlemi iki (veya daha fazla) 32 Bit işlemine bölmesi gerekir. Bu yüzden 64 Bit sayı ile çok çalışan bir uygulama, doğrudan donanımda 64 Bit matematik yapabilme hız kazanacaktır.

Son fakat en az değil, x86-64 mimarisi klasik x86 mimarisinden daha fazla kayıt sunuyor. Kayıtlarla çalışmak, RAM ile çalışmaktan çok daha hızlıdır ve CPU'nun sahip olduğu kayıt sayısı arttıkça, kayıt değerlerini RAM'e ve kayıtlara geri almak daha az sıklıkta kalır.

CPU'nuzun 64 Bit modunda çalışıp çalışmadığını bulmak için çeşitli sysctl değişkenlerine bakabilirsiniz. Örneğin bir terminal açın ve yazın

sysctl machdep.cpu.extfeatures

EM64T listeleniyorsa, CPU'nuz x86-64 standardına göre 64 Bit adres alanını destekler. Ayrıca bakabilirsiniz

sysctl hw.optional.x86_64

1 (true / etkin) diyorsa, CPU'nuz x86-64 Bit modunu destekliyorsa, 0 (false / disabled) diyorsa, kullanmaz. Ayar hiç bulunamadıysa, yanlış olduğunu düşünün.

Not: sysctl değişkenlerini yerel bir C uygulamasının içinden de alabilirsiniz, komut satırı aracını kullanmanıza gerek yoktur. Görmek

man 3 sysctl

Hata: "machdep.cpu.extfeatures" bilinmeyen bir anahtardır

Sanırım, istihbarat için yeterince talihsiz değilseniz, EM64T olarak da adlandırılmıyor.

9

Adres alanının (gerçek) bellekten daha fazlası için kullanılabileceğini unutmayın. Ayrıca, daha güçlü ve verimli blok düzeyinde VM düzeyi önbellekleme özelliği devreye girdiğinden, daha garip erişim modellerinde performansı artıran büyük haritaların hafıza haritasını çıkarabilir. Yığın yönetici daha az olduğu için 64-bit'te büyük bellek bloklarını ayırmak daha güvenlidir. büyük bir blok ayırmasına izin vermeyecek adres alanı parçalanmasıyla karşılaşması muhtemel.

Bu başlıkta bahsedilenlerden bazıları (# yazmaçların iki katına çıkması gibi) sadece 64-bit için değil, sadece x86-> x86_64 için geçerlidir. Tıpkı x86_64 kapsamında bir garantili SSE2, 686 opcode ve PIC yapmanın ucuz bir yolu olduğu gibi. Bu özellikler kesinlikle 64 bit ile ilgili değil, bilinen x86 sınırlamalarını ortadan kaldırmak ve eskileri azaltmakla ilgilidir

Dahası, insanlar genellikle kayıtların hızlanmanın nedeni olarak ikiye katlanmasına işaret ederken, hile yapan varsayılan SSE2 kullanımı (memcpy ve benzeri işlevleri hızlandırmak) daha olasıdır. Aynı seti x86 için etkinleştirirseniz, fark çok daha küçüktür. (*) (***)

Ayrıca, genellikle bir başlangıç ​​cezasının bulunduğunu, çünkü ortalama veri yapısının basitçe bir işaretçinin boyutu daha büyük olduğu için artacağını unutmayın. Bu aynı zamanda önbellek etkilerine sahiptir, ancak ortalama memcpy () (ya da kendi dilinizde hafıza kopyası için ne kadar olursa olsun) daha uzun süreceği için daha belirgindir. Bu sadece yüzde btw oranındadır, ancak yukarıda belirtilen hızlanmalar da bu büyüklüktedir.

Genellikle hizalama ek yükü 64-bit mimarilerde daha büyüktür (daha önce 32-bit kayıtlar genellikle 32-bit ve 64-bit değerlerinin bir karışımı haline gelir), yapıları daha da şişirir.

Genel olarak, basit testlerim, sürücüler ve çalışma zamanı kitaplıkları tam olarak uyarlanmışsa, ortalama uygulama için önemli bir hız farkı sağlamazsa, birbirlerini kabaca iptal edeceklerini belirtir. Bununla birlikte, bazı uygulamalar aniden daha hızlı olabilir (örneğin, AES'e bağlı olduğunda) veya daha yavaş (önemli veri yapısı sürekli olarak taranır / taranır / yürür ve çok fazla işaretçi içerir). Testler yine de Windows'taydı ve PIC optimizasyonu kıyaslanmamıştı.

Çoğu JIT-VM dilinin (Java, .NET) ortalama olarak (dahili olarak) C ++ 'dan daha fazla işaretçi kullandığını unutmayın. Muhtemelen hafıza kullanımları, ortalama programdan daha fazla artmaktadır, ancak bunu doğrudan yavaşlayan etkilerle eşleştirmeye cesaret edemiyorum (çünkü bunlar gerçekten karmaşık ve korkak bir canavardır ve genellikle ölçmeden tahmin etmek zordur)

Windows 64-bit, basit işlemleri hızlandıran ve karmaşık (sin, cos vb.) İşlemleri yavaşlatan görünen kayan nokta için SSE2'yi kullanır.

(*) az bilinen bir gerçek, SSE sicillerinin sayısının 64 bit modunda ikiye katlanmasıdır.

(**) Dr Dobbs'un birkaç yıl önce güzel bir makalesi vardı.


8

Burada çoğu kişinin bahsettiği bariz hafıza sorunlarının yanı sıra, Knuth'un (diğerleri arasında) son zamanlarda hakkında konuştuğu "geniş kelime işlem" kavramına bakmaya değer olduğunu düşünüyorum. Bit manipülasyonu yoluyla kazanılacak çok fazla verimlilik vardır ve 64 bitlik bir sözcükteki bitsel işlemler 32 bitlik bir sözcükten çok daha ileri gider. Kısacası, kayıtlarda daha fazla işlem yapmak için hafızayı vurmak zorunda kalmazsınız ve performans açısından bakıldığında bu oldukça büyük bir kazançtır.

Bahsettiğim havalı püf noktalarının örnekleri için Cilt 4, Ön Fascicle 1A'ya bir göz atın.


7

Daha fazla belleğe hitap etme yeteneğinin yanı sıra, x86_64 ayrıca derleyicinin daha verimli kod oluşturmasını sağlayan daha fazla kayıt özelliğine sahiptir. Performans gelişimi genellikle olsa da oldukça küçük olacaktır.

X86_64 mimarisi, x86 ile geriye doğru uyumludur. Değiştirilmemiş 32-bit işletim sistemlerini çalıştırmak mümkündür. Değiştirilmemiş 32 bit yazılımı 64 bit işletim sisteminden çalıştırmak da mümkündür. Yine de tüm normal 32-bit kütüphaneleri gerektirecek. Ayrı olarak kurulmaları gerekebilir.


Daha fazla kayıt ve yeniden tasarlanmış bir ABI (kayıt fonksiyonunda geçiş işlevi) genellikle% 10 ila% 15'lik bir hızlanmadır ve bu oldukça iyi bir değerdir. Şimdi 32bit işaretçilere sahip bir x32 Linux ABI var, ancak amd64 uzun modunu kullanıyorlar ve kayıtlara izinsiz aramalar yapıyorlar. Öyleyse, amd64'ün tüm hız avantajlarına sahipsiniz, ancak her gösterici için 64 bit'e ihtiyaç duymuyor. > 4GB (sanal) belleğe ihtiyaç duymayan her şey için iyidir.
Peter Cordes,

6

Bu konu zaten çok uzun, ama ...

Yanıtların çoğu, 64 bitlik daha büyük bir adres alanına sahip olduğunuza odaklanır, böylece daha fazla belleği ele alabilirsiniz. Tüm uygulamaların yaklaşık% 99'unda bu tamamen alakasızdır. Büyük boğmaca

Gerçek 64 bit iyidir sebebi değildir kayıtları daha büyük olduğunu, ancak bunların çoğu iki kat vardır! Bu, derleyicinin değerlerinizi daha fazlasını belleğe dökmek ve birkaç komutla geri yüklemek yerine kayıt defterinde tutabileceği anlamına gelir. Bir optimize edici derleyici sizin için döngülerinizi açıyorsa ve bunları kabaca iki katı kadar açarak performansa gerçekten yardımcı olabilir.

Ayrıca, 64-bit için alt rutin arayan / arayan uçları kuralları, geçirilen parametrelerin çoğunu arayan yerine onları yığına iten ve arayan parçanın çıkıntı yapan kısmı olarak tutmak için tanımlanmıştır.

Yani "tipik" bir C / C ++ uygulaması sadece 64-bit için yeniden derleyerek yaklaşık% 10 veya% 15 performans artışı elde edecektir. (Uygulamanın bir kısmının hesaplanmış olduğunu varsayarsak. Tabii ki bu garanti edilmez; Tüm bilgisayarlar aynı hızda bekler. Mileage May Vary.)


Komut seti x64 için x86'dan daha iyi olsa da, bu genellikle önemsiz olacaktır. 64 bit kod, 32 bit'den daha yavaş olabilir, çünkü talimatlar daha büyük olabilir, bu nedenle daha az önbellekte yer alabilir. (BTW ön döngülerinin açılması, günümüzde çok öneme sahip bir tekniktir, çünkü önbellek eksikliğinin sayısını artıracaktır.) Çalıştığım yerde, artan bellek adreslemesi için 64 bit gerekiyor.
David Thornley

David, x64 ve x86 komut setleri, işlenen boyutu ve bazı kayıt önekleri hariç neredeyse aynıdır. IA64 ile, aka Itanium aka Itanic, 64-bit kodlar tipik olarak x x 3 kodlarının 3 katı olur ve talimat önbelleğini tam olarak söylediğiniz gibi vurgular. Bu, mimarinin neden başarısızlıkla sonuçlandığının büyük bir faktördü. Ancak x86 aka AMD64 aka EM64T ile bu kod artışı tipik olarak sadece% 10-20'dir.

Her ne kadar x64 daha fazla kayıt adreslenebilse de , mevcut fiziksel kayıtların sayısını ne kadar arttırdığına emin değilim - tüm yeni x86 işlemcilerinde çok sayıda (> 100) "gölge" kayıt var ve "kayıt yeniden adlandır" + spekülatif uygulama kullan bağımsız kod yollarının bir dereceye paralel olarak çalışmasına izin vermek için. Aslında, eğer n bağımsız kod yolu yürütülürse, n kadar çok sayıda kayıt kullanılabilir durumdadır (tüm gölge kayıtları tükenene kadar).

@j_random_hacker. Bu hilelerin mimarlığın altında olduğu konusunda kesinlikle haklısın. Ancak, ne kadar gölge kayıt olursa olsun, programın 8'den fazla veri öğesiyle çalışması gerekiyorsa ve talimat setinde sadece 8 kayıt bulunmuyorsa, derleyici mağaza / yeniden yükleme talimatlarını oluşturmalıdır. Yani evet, X64 gerçekten iki kez "kullanılabilir" kadar kayıt yapar

Benim deneyimim, bunun daha az olduğu ve taşınacak avg membranın daha büyük olması nedeniyle dengeleniyor.
Marco van de Voort

6

Bahsedilen avantajların yanı sıra, burada güvenlikle ilgili biraz daha:

  • x86_64 cpus sayfa tablolarında yürütülemez biti var. Bu, arabellek taşması nedeniyle ortaya çıkan güvenlik ihlallerini önleyebilir. 32 bit x86 cpus, PAE modunda bu özelliği yalnızca desteklemektedir.
  • Daha büyük adres alanı, arabellek kullanımını zorlaştıran daha iyi bir adres alanı düzeni rastgele seçimine (ASLR) izin verir.
  • x86_64 cpus konum bağımsız kod özelliği yani komut işaretçisi registerına (RIP) göre veri erişimi sağlıyor.

Akla gelen bir başka avantaj vmalloc(), Linux çekirdeğinde ayrılan sanal bitişik bellek miktarının 64 bit modunda daha büyük olabileceğidir.


5

32 bit bir makinede adreslenecek yalnızca 4,294,967,295 bayt belleğe sahip olacaksınız. 64 bitlik bir makinede 1.84467441 × 10 ^ 19 bayt belleğiniz vardır.

Wikipedia bunu söylüyor

64-bit işlemciler, (örneğin, 32-bit ortamlarda çalışmaktan iki kat daha hızlı) belirli görevleri (büyük rakamların yüzdeleri gibi) hesaplar (örneğin, 32-bit ve 64-bit Windows Hesap Makinesi arasındaki karşılaştırmadan elde edilir; ). Bu, 64-bit optimize uygulamaların teorik olanakları hakkında genel bir fikir verir.

64 bit mimariler tartışmasız dijital video, bilimsel bilgi işlem ve büyük veritabanları gibi uygulamalarda büyük veri kümeleriyle çalışmayı kolaylaştırırken, bunların veya 32 bit uyumluluk modlarının karşılaştırılabilir bir fiyattan daha hızlı olup olmayacağı konusunda önemli tartışmalar yapıldı. Diğer görevler için 32 bit sistemler. X86-64 mimarisinde (AMD64), 32 bit işletim sistemlerinin ve uygulamaların çoğu, 64 bit donanım üzerinde sorunsuz çalışabilir.

Sun'ın 64-bit Java sanal makineleri 32-bit sanal makinelerinden daha yavaş başlıyor çünkü Sun, 64-bit platformlar için yalnızca "server" JIT derleyicisini (C2) uyguladı. [9] Daha az verimli kod üreten ancak daha hızlı derleyen "istemci" JIT derleyicisi (C1), 64 bit platformlarda kullanılamaz.

32-bit ve 64-bit işlemcilerin karşılaştırmasında dikkate alınması gereken tek faktör hız olmadığı belirtilmelidir. Çok görevli, stres testi ve kümeleme (yüksek performanslı bilgi işlem için), HPC gibi uygulamalar, doğru dağıtımda verilen 64 bit mimariye daha uygun olabilir. 64-bit kümeler, bu nedenle, IBM, HP ve Microsoft gibi büyük kuruluşlarda geniş çapta konuşlandırılmıştır.


2
Fiziksel adres veriyolu uzunluğu, 32 bit mi yoksa 64 bit işlemci mi olduğundan bağımsızdır. Bazı 32 bit işlemcilerde 32 bitten büyük adres veriyolları vardır ve 64 bit işlemcilerin hiçbirinde 64 bit adres veri yolu yoktur.

1
Kabul. Teoride, adres alanı 2 ^ 64'tür. Uygulamada, CPU üreticileri 2 ^ 40 veya 2 ^ 48 gibi daha küçük değerler kullanıyor.
Stu Thompson

5

Microsoft.com'dan teklif:

Aşağıdaki tabloda, Windows'un 64 bit sürümlerine ve 64 bit Intel işlemcisine dayanan bilgisayarların maksimum kaynakları, mevcut 32 bit kaynak maksimumlarıyla karşılaştırılmıştır.

MS Tablo


2
İlginç, ancak Windows'un bazı 32 bit sürümlerinin daha fazla FİZİKSEL belleğe izin verdiğine dikkat çekmek gerekir. Örneğin bakınız, en.wikipedia.org/wiki/...
ChrisInEdmonton

@ChrisInEdmonton, sistem 4GB'tan fazla veya belleği destekliyor ancak her işlem için adres hala 2GB ile sınırlıdır (büyük adres farkında 3GB). Bu nedenle, sisteminizde çok fazla bellek varsa, yine de geniş kapsamlı bellek programlarına yardımcı olmaz ve performans 64 bit sürümün gerisinde kalır. Ayrıca, ASLR ve hafıza eşlenmiş dosya için daha küçük bir adres aralığı vardır
phuclv

4

Kristof ve Poshi, 32 ve 64 bit işletim sistemleri arasındaki temel teknik farklılıkların, kullanıcı deneyiminin genellikle teoriden çok farklı olduğunu belirtti. Windows'un bugüne kadarki 64 bit tüketici sürümlerinde (XP ve Vista) sürücü desteklerinde büyük boşluklar var. Yazıcılarda, tarayıcılarda ve diğer harici aygıtlarda, 32 bit sürümlerle iyi çalışan 64 bit sürümleriyle çalışmadığını gördüm. Bunlar 64 bit sürücüleri olan cihazlardır ve hala çalışmayacaklardır. Bu noktada, Windows 7'nin yalnızca şu anda erişime sahip olan uber-geek'leri değil, gerçek son kullanıcılardan nasıl idare ettiğini duyuncaya kadar Microsoft'tan 64-bit olan herhangi bir tüketiciden uzak durmanızı tavsiye ederim. En az 6 ay verin ve insanların neler yaşadığını görün.


Daha az sürücü olabilir, ancak ses çıkardığı kadar da fena değil. 2007'den beri 64 bit kullanıyorum ve hiçbir sıkıntı yaşamadım. Bunu söylediğimde, bağlı hiçbir karanlık veya eski cihaz yok.
RomanSt

1
Vista 64 bit kullanan en son yazıcı, geçen ay 2 aylık bir Dell sisteminde yepyeni bir HP çok işlevli yazıcıydı. Hem Dell hem de HP pes etti ve müşterim XP Pro'yu koymak ve Vista'dan kurtulmam için bana para verdi. İki ünite hakkında da hiçbir şey gizlenemez.
Kevin K

1
Genellikle 64 bit işletim sistemine sahip bir bilgisayar satın alırsanız, her şey çalışır. Eski bir bilgisayarı güncellemeye çalışmadan önce ya da daha eski bir yazıcım olsaydı ya da kendi başıma yükseltmeyi seviyorsam dikkatli olurdum.
David Thornley

Brandish istediği Donanım Windows ile Works veya , Windows ile kullanmak için Sertifikalı logolar gerekir 64 bit sürücüleri sunuyoruz. Belki bir dahaki sefere bak. Ancak, gerçekten de, çoğu satıcı hala 32 bit olacağı için, bazen satıcılar tüketici donanımı için zahmet etmiyorlar.
Joey,

2

Bazı oyun oynama programları bit-board gösterimi kullanır. Satranç, dama ve othello, örneğin 8x8'lik bir tahtaya, yani 64 kareye sahiptir, bu yüzden en az 64 bitlik bir makine kelimesinde olmak performansın önemli ölçüde yardımcı olur.

64 bit yapımı 32 bit sürümden neredeyse iki kat daha hızlı olan bir satranç programını okuduğumu hatırlıyorum.


2

32 bit ve 64 bit terimi, bir bilgisayar işlemcisinin (ayrıca CPU olarak da adlandırılır) bilgileri işleme biçimini ifade eder. Windows'un 64 bit sürümleri, 32 bit sistemlerden daha büyük miktarda rasgele erişim belleği (RAM) kullanır.

hız bence farklı olabilir


1

Microsoft Windows ile ilgili olarak bunun bir başka amacı, uzun yıllar boyunca 32 bit işletim sistemleri için tasarlanmış ve 64 bit derleme için optimize edilmemiş olan Win32 API'sinin olmasıdır. Uygulamalarım için bazı DLL'ler yazdığımda, genellikle 64 bitlik olmayan Win32 sürümünde derlerim. Vista'dan önce pek çok başarılı 64 bit Windows sürümü olmadı. Yeni makinemde çalıştığım yerin 4 GB RAM olduğuna inanıyorum, ancak hala bilinen bir kararlı O / O olduğu için 32 bit Windows XP Pro kullanıyorum. XP64 veya Vista'ya göre S.

Bence, bazı kişiler için neden bu kaydın önemli olduğu konusunda daha fazla ayrıntı için 16-bit'den 32-bit'e kayma olduğunda da tekrar bakmak isteyebilirsiniz. Bir şirketin masaüstünde (örneğin küçük muhasebe paketleri) çalıştırabileceği kritik uygulamalar 64-bit bir işletim sisteminde çalışmayabilir ve bu nedenle eski bir makineyi sanal veya gerçek bir ortamda tutmaya ihtiyaç duyulur.

Bir adresin boyutunu değiştirmek bazı büyük sonuçlara ve tepkilere neden olabilir.


1

En pratik amaçlar için, muhtemelen bir fark görmeyeceksiniz.

64 bit işletim sistemi kurmak için 64 bit CPU'ya (son birkaç yıldaki çoğu CPU'ya) sahip olmalısınız.

64 bit işletim sisteminin birkaç avantajı vardır:

  • 4GB'tan fazla RAM çalıştırmanıza izin verir (32 bit işletim sisteminde ele alabileceğiniz maksimum sayı 2 ^ 32 = 4GB'dır)
  • Büyük veri kümeleriyle (örn. Excel'de) ve belirli hesaplama gerektiren yoğun görevlerle (örneğin Photoshop ve büyük dosyalar) çalışmak için faydalıdır.
  • 64 bitlik bir işletim sisteminde yalnızca 64 bitlik bir program çalıştırabilirsiniz, ancak her ikisinde de 32 bitlik bir program çalıştırabilirsiniz (her ikisinin de çok fazla programın geldiğini unutmayın, bu nedenle yalnızca 64 bit değildir) programları).

Çoğu senaryoda, 64 bit programlar biraz daha fazla bellek kullanır, ancak kişisel bir bilgisayar için bu genellikle fark edilmez.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.