32-Bit- oder 64-Bit-Systeme

224

Was sind die Unterschiede zwischen 32-Bit- und 64-Bit-Systemen?

Welche scharfen Unterschiede haben Sie erlebt, wenn Sie beide verwendet haben?

Wäre es in einigen Fällen ein Problem, 32-Bit-Programme auf 64-Bit-Systemen zu verwenden?

Mehper C. Palavuzlar
quelle
Hier gibt es viele Verwechslungen, und im Web gibt es viele Verwechslungen zwischen der physischen Adressierung (Zugriff auf RAM), der PEA, der Motherboard-Adressierung und der logischen Adressierung (virtueller Speicher pro Prozess). Auf einem 32-Bit-Betriebssystem ist der virtuelle Speicher auf 4 GB begrenzt, abzüglich der vom Kernel reservierten Daten. Es ist unabhängig vom RAM, Sie könnten 0,1 MB oder 8 GB RAM haben und Sie hätten genau 4 GB virtuellen Speicher (aber einige sind vom Kernel reserviert). PEA kann verwendet werden, um mehr RAM zu haben, ist jedoch keine perfekte Antwort, da der Kernel NICHT auf alles zugreifen kann.
Strg-Alt-Delor

Antworten:

264

Hinweis: Diese Antworten gelten für standardmäßige x86-basierte PC-CPUs (Intel und AMD) und Windows (wie normalerweise für Endbenutzer konfiguriert). Andere 32-Bit- oder 64-Bit-Chips, andere Betriebssysteme und andere Betriebssystemkonfigurationen können unterschiedliche Nachteile haben.

Aus technischer Sicht bietet ein 64-Bit-Betriebssystem Folgendes:

  • Ermöglicht es einzelnen Prozessen, jeweils mehr als 4 GB RAM zu adressieren (in der Praxis begrenzen die meisten, aber nicht alle 32-Bit-Betriebssysteme den gesamten verwendbaren System-RAM auf weniger als 4 GB, nicht nur das Maximum pro Anwendung).

  • Alle Zeiger benötigen 8 Bytes anstelle von 4 Bytes. Die Auswirkung auf die RAM-Auslastung ist minimal (da Sie wahrscheinlich nicht über eine mit Gigabyte an Zeigern gefüllte Anwendung verfügen). Im schlimmsten theoretischen Fall kann der CPU-Cache jedoch 1/2 so viele Zeiger speichern (machen) es ist effektiv die Hälfte der Größe). Für die meisten Anwendungen ist dies keine große Sache.

  • Im 64-Bit-Modus gibt es viel mehr Allzweck-CPU-Register. Register sind der schnellste Speicher in Ihrem gesamten System. Im 32-Bit-Modus gibt es nur 8 und im 64-Bit-Modus 16 Universalregister. In wissenschaftlichen Computeranwendungen, die ich geschrieben habe, konnte ich durch erneutes Kompilieren im 64-Bit-Modus eine Leistungssteigerung von bis zu 30% feststellen (meine Anwendung könnte die zusätzlichen Register wirklich nutzen).

  • Bei den meisten 32-Bit-Betriebssystemen können einzelne Anwendungen nur 2 GB RAM verwenden, selbst wenn 4 GB installiert sind. Dies liegt daran, dass die anderen 2 GB Adressraum für die gemeinsame Nutzung von Daten zwischen Anwendungen und dem Betriebssystem sowie für die Kommunikation mit Treibern reserviert sind. Unter Windows und Linux können Sie diesen Kompromiss auf 3 GB für Anwendungen und 1 GB für gemeinsam genutzte Anwendungen anpassen. Dies kann jedoch bei einigen Anwendungen zu Problemen führen, bei denen die Änderung nicht erwartet wird. Ich vermute auch, dass es eine Grafikkarte lähmen könnte, die 1 GB RAM hat (aber ich bin nicht sicher). Mit einem 64-Bit-Betriebssystem können einzelne 32-Bit-Anwendungen auf 4 GB erweitert werden.

Aus Sicht eines Benutzers:

  • Die Anwendungsgeschwindigkeit einer 64-Bit-Anwendung unter einem 64-Bit-Betriebssystem ist normalerweise höher als die 32-Bit-Version der Anwendung unter einem 32-Bit-Betriebssystem. Die meisten Benutzer werden diese Geschwindigkeit jedoch nicht bemerken. Die meisten Anwendungen für normale Benutzer nutzen die zusätzlichen Register nicht wirklich aus, oder die Vorteile werden durch größere Zeiger ausgeglichen, die den Cache füllen.

  • Wenn Sie über Memory-Hog-Anwendungen (wie Bildbearbeitungsprogramme, Videoverarbeitung, wissenschaftliches Rechnen usw.) verfügen (oder mehr als 3 GB RAM erwerben können) und eine 64-Bit-Version der Anwendung erhalten, Die Wahl ist einfach: Verwenden Sie das 64-Bit-Betriebssystem.

  • Manche Hardware verfügt nicht über 64-Bit-Treiber. Überprüfen Sie Ihr Motherboard, alle Steckkarten und alle USB-Geräte, bevor Sie den Wechsel vornehmen. Beachten Sie, dass in den frühen Tagen von Windows Vista viele Probleme mit Treibern aufgetreten sind. In diesen Tagen sind die Dinge im Allgemeinen besser.

  • Wenn Sie so viele Anwendungen gleichzeitig ausführen, dass Ihnen der Arbeitsspeicher ausgeht (dies lässt sich normalerweise daran erkennen, dass Ihr Computer langsam wird und die Festplatte knirscht), benötigen Sie ein 64-Bit-Betriebssystem (und genügend RAM).

  • Sie können 32-Bit-Anwendungen (aber keine Treiber) problemlos unter 64-Bit-Windows ausführen. Die schlechteste Verlangsamung, die ich für eine 32-Bit-Anwendung in 64-Bit-Windows gemessen habe, liegt bei etwa 5% (was bedeutet, dass es höchstens 60 * 1,05 = 65 Sekunden dauerte, bis in 32-Bit-Windows etwas ausgeführt wurde) die gleiche 32-Bit-Anwendung in 64-Bit-Windows).

Was 32-Bit vs. 64-Bit nicht impliziert:

Auf x86-Systemen bezieht sich die 32-Bit-Version im Vergleich zur 64-Bit-Version direkt auf die Größe der Zeiger. Das ist alles.

  • Es bezieht sich nicht auf die Größe des C- intTyps. Dies wird von der jeweiligen Compiler-Implementierung bestimmt, und die meisten gängigen Compiler wählen 32-Bit intauf 64-Bit-Systemen.

  • Es bezieht sich nicht direkt auf die Größe normaler Nichtzeigerregister. Die Verwendung von 64-Bit-Arithmetikregistern erfordert jedoch, dass die Anwendung und das Betriebssystem auch im 64-Bit-Zeigermodus ausgeführt werden.

  • Es bezieht sich nicht direkt auf die Größe des physischen Adressbusses. Beispielsweise benötigt ein System mit 64 Bit breiten Cache-Zeilen und maximal 512 GB Speicher nur 33 Bit in seinem Adressbus (dh log2(512*1024**3) - log2(64) = 33).

  • Es bezieht sich nicht auf die Größe des physischen Datenbusses: Dies hängt mehr mit den Herstellungskosten (Anzahl der Pins im CPU-Sockel) und den Cache-Zeilengrößen zusammen.

Herr Fooz
quelle
8
Sehr gute Antwort. Vor allem, weil Sie festgestellt haben, dass es eigentlich kein 4-GB-RAM-Limit gibt, sondern ein Limit für die Speichernutzung. Nur zu Ihrer Information, ich denke, Sie sollten einen Blick auf diesen Link werfen
Durchbruch
8
Dies sind Anwendungen, die unter 64-Bit-Fenstern nicht funktionieren: 16-Bit-Anwendungen / Anwendungen, die 32-Bit- oder nicht signierte Kernelmodustreiber verwenden. Das ist eine Menge für einen Software-Süchtigen wie mich ...
Fluxtendu
1
@flextendu Angesichts der Leistungsanforderungen dieser alten Programme können Sie sie mit ziemlicher Sicherheit in einer virtuellen Maschine ausführen. Mit VMware Player, Virtual PC und Virtual Box gibt es keinen Grund, eine davon nicht auszuprobieren, wenn Sie eine 32-Bit-Windows-Lizenz haben. Wenn Sie sich damit nicht anlegen möchten, funktionieren sie wahrscheinlich auch im "Windows XP-Modus".
Mark Booth
6
Übrigens, 32-Bit-Anwendungen belegen nur dann mehr als 2 GB RAM, wenn in ihrem Manifest ein bestimmtes Flag aktiviert ist. Quelle: blogs.technet.com/b/markrussinovich/archive/2008/11/17/…
Hello71
Ja, ich bin mir sicher, dass Hello71 auf etwas ziemlich Wichtiges gestoßen ist, das hier nicht behandelt wird: Die meisten 32-Bit-Apps werden den zusätzlichen Arbeitsspeicher niemals direkt nutzen. Ich denke, das ist erwähnenswert, nein?
Django Reinhardt
107

Grundsätzlich können Sie alles in größerem Maßstab tun:

  1. RAM pro Betriebssystem: RAM-Limit von 4 GB auf x86 für das Betriebssystem (meistens)
  2. RAM pro Prozess: RAM-Limit von 4 GB auf x86 für Prozesse (immer). Wenn Sie der Meinung sind, dass dies nicht wichtig ist, führen Sie eine umfangreiche datenbankintensive MSSQL-Anwendung aus. Es wird> 4GB selbst verwenden, wenn Sie es zur Verfügung haben und viel besser laufen.
  3. Adressen: Adressen sind 64-Bit-Adressen anstelle von 32-Bit-Adressen, sodass Sie "größere" Programme verwenden können, die mehr Speicherplatz benötigen.
  4. Für Programme verfügbare Handles: Sie können mehr Datei-Handles, Prozesse usw. erstellen. Beispiel: Unter Windows x64 können Sie> 2000 Threads pro Prozess erstellen, unter x86 jedoch näher an einigen Hundert.
  5. Breitere Programme verfügbar: Auf einem x64-Computer können Sie sowohl x86- als auch x64-Programme ausführen. (Beispielfenster: Wow64, Windows32 unter Windows64-Emulation)
  6. Emulationsoptionen: Auf einem x64-Computer können Sie sowohl x86- als auch x64-VMs ausführen.
  7. Schneller: Einige Berechnungen sind auf einer 64-Bit-CPU schneller
  8. Aufteilen mehrerer Systemressourcen: Eine Menge RAM-Speicher ist sehr wichtig, wenn Sie mindestens eine VM ausführen möchten, die die Systemressourcen aufteilt.
  9. Exklusive Programme verfügbar: Einige neue Programme unterstützen nur x64. Beispiel Exchange 2007.
  10. Zukünftiges veraltetes x86 ?: Mit der Zeit werden immer mehr 64-Bit-Versionen und immer mehr x86-Versionen nicht mehr verwendet. Daher werden Anbieter immer mehr 64-Bit-Versionen unterstützen.

Die beiden großen Arten von 64-Bit-Architekturen sind x64- und IA64-Architekturen. Aber x64 ist bei weitem das beliebteste.

x64 kann sowohl x86-Befehle als auch x64-Befehle ausführen. IA64 führt auch x86-Befehle aus, jedoch keine SSE-Erweiterungen. Auf Itanium ist Hardware für die Ausführung von x86-Anweisungen reserviert. Es ist ein Emulator, aber in Hardware.

Wie @Phil bereits erwähnt hat, können Sie hier einen genaueren Blick darauf werfen, wie es funktioniert .

Brian R. Bondy
quelle
1
Äh. IA64 führt x86-Befehle aus. Es werden jedoch keine SSE-Erweiterungen durchgeführt. Auf Itanium ist Hardware für die Ausführung von x86-Anweisungen reserviert. Es ist ein Emulator, aber in Hardware.
Tzot
2
Vor ein paar Jahren hat Raymond Chen über das "Limit" von 2000 gepostet und es ist mehr oder weniger eine städtische Legende: blogs.msdn.com/oldnewthing/archive/2005/07/29/444912.aspx
bk1e
Stimmen Sie Arstechnica für ihre Erklärung zu.
Avihu Turzion
2
RAM-Limit von 4 GB ist nicht ganz wahr (es ist eher ein künstliches Limit für Windows-Systeme von Heimanwendern), überprüfen Sie PAE . Mit der meisten aktuellen Hardware kann ein Linux-PAE-Kernel (der standardmäßig für 32-Bit-Versionen verwendet wird) problemlos mehr als 4 GB adressieren. Gleiches gilt für FreeBSD und NetBSD.
Izzy
32-Bit-Systeme können aufgrund dieser "Adressen" (3. Punkt) nicht mehr als 4 GB (1. Punkt) verwenden. Die höchste 32-Bit-Nummer ist nämlich 4.294.967.296 (= 4 GB). Ihr 1. und 3. Punkt sind also die GLEICHEN. Sie können den 3. Punkt entfernen. :)
Jet
46

Die größte Auswirkung, die die Leute im Moment bemerken werden, ist, dass ein 32-Bit-PC nur maximal 4 GB Arbeitsspeicher adressieren kann. Wenn Sie den vom Betriebssystem für andere Zwecke zugewiesenen Speicher entfernen, werden auf Ihrem PC wahrscheinlich nur etwa 3,25 GB verwendbarer Speicher angezeigt. Wechseln Sie zu 64-Bit und diese Grenze verschwindet.

Wenn Sie sich ernsthaft weiterentwickeln, kann dies sehr wichtig sein. Versuchen Sie, mehrere virtuelle Maschinen auszuführen, und Sie haben bald keinen Speicher mehr. Server benötigen mit größerer Wahrscheinlichkeit zusätzlichen Arbeitsspeicher. Daher ist die 64-Bit-Nutzung auf Servern weitaus höher als auf Desktops. Das Moore-Gesetz stellt sicher, dass wir immer mehr Arbeitsspeicher auf den Maschinen haben und Desktops daher irgendwann auch auf 64-Bit als Standard umstellen.

Eine viel detailliertere Beschreibung der Prozessorunterschiede finden Sie in diesem hervorragenden Artikel von ArsTechnica .


quelle
7
Die 32-Bit-Plattform und die 4-GB-Beschränkung stellen eine Art Fehlbezeichnung dar und sind (waren) hauptsächlich eine Einschränkung der Architektur des Betriebssystems. Wirklich, die 4 GB von 32-Bit sind in einem Prozess-VA-Bereich wirklich begrenzt. Die physikalische Adresse unterstützt 36-Bit auf Intel 32-Bit-CPUs
Tall Jeff
1
Sie machen einen guten Punkt, der sicherlich wahr ist. In der realen Welt der PC-Benutzer ist es jedoch so, dass die Maschine nicht die vollen 4 GB nutzen wird, für die sie bezahlt haben. Mein Vater hatte dieses Problem und ist immer noch verwirrt, dass die 4 GB, für die er bezahlt hat, nicht vollständig genutzt werden können.
2
Schätzen Sie Ihren Standpunkt, aber wenn Sie nur versuchen, die Annahme zu begründen, dass der Fix nicht im Prozessor enthalten ist oder auf 64-Bit übergeht, handelt es sich nur um ein geringfügig verbessertes Betriebssystemdesign. Dies wird beispielsweise in den Enterprise-Versionen von Windows bereits in 32-Bit-Versionen behoben. Es ermöglicht 64 GB RAM.
Tall Jeff
Technisch gesehen verschwindet das Limit nicht. Es bewegt sich weiter nach draußen, wo es unpraktisch / unmöglich ist, in den nächsten zehn Jahren so viel RAM auf einem Computer zu installieren.
Siehe meine Bemerkung zu PAE oben: Die Beschränkung auf 4 GB gilt nicht für das gesamte System, sondern nur für einzelne Prozesse (kein Prozess kann auf 4 GB und mehr selbst zugreifen), aber das gesamte System, dh alle Prozesse zusammen, können mit PAE aktiviert werden ). Wenn also keine Anwendungen installiert sind, die vom Zugriff auf 4 GB und mehr (z. B. Video-Editoren / -Konverter mit großen Videodateien) und 8 GB + profitieren , sollte es keinen großen Unterschied machen, ob 32-Bit oder 64-Bit verwendet wird.
Izzy
31

Nichts ist kostenlos: Obwohl 64-Bit - Anwendungen können mehr Speicher zugreifen als 32-Bit - Anwendungen, der Nachteil ist , dass sie benötigen mehr Speicher. Alle diese Zeiger, die früher 4 Bytes benötigten, benötigen jetzt 8. Die Standardanforderung in Emacs ist beispielsweise 60% mehr Arbeitsspeicher, wenn sie für eine 64-Bit-Architektur erstellt wurden. Diese zusätzliche Stellfläche beeinträchtigt die Leistung auf allen Ebenen der Speicherhierarchie: Das Laden größerer ausführbarer Dateien von der Festplatte dauert länger, größere Arbeitssets verursachen mehr Paging und größere Objekte bedeuten, dass sie weniger in den Prozessor-Caches passen. Wenn Sie an eine CPU mit einem 16-KByte-L1-Cache denken, kann eine 32-Bit-Anwendung mit 4096 Zeigern arbeiten, bevor sie den L2-Cache verfehlt und erreicht. Eine 64-Bit-Anwendung muss jedoch nach nur 2048 Zeigern auf den L2-Cache zugreifen.

Unter x64 wird dies durch die anderen Architekturverbesserungen, wie z. B. mehr Register, gemildert. Wenn Ihre Anwendung auf PowerPC jedoch 4G nicht verwenden kann, wird sie wahrscheinlich auf "ppc" schneller ausgeführt als auf "ppc64". Sogar auf Intel gibt es Workloads, die auf x86 schneller laufen, und auf x64 laufen nur wenige mehr als 5% schneller als auf x86.

James
quelle
2
Diese Antwort deutet darauf hin, dass PowerPC64 nicht so gut ist wie x86-64. Die Wahrheit ist, dass powerpc64 powerpc nicht verbessert hat, da powerpc nicht kaputt war.
Strg-Alt-Delor
3
Linux hat jetzt ein x32-ABI mit allen Geschwindigkeitsvorteilen von x86-64 (mehr Register, überarbeitetes ABI), aber mit 32-Bit-Zeigern. +1 für den Hinweis, dass die Vorteile des 64-Bit-Modus nicht von der tatsächlichen Vergrößerung der Breite herrühren, sondern von der Möglichkeit, einen Großteil des Gepäcks fallen zu lassen, das die Architektur zurückhielt. 64-Bit-Register haben für einige Anwendungen einen Wert, aber 64-Bit-Zeigerplatz wird seltener benötigt.
Peter Cordes
19

Ein 64-Bit-Betriebssystem kann mehr RAM verwenden. Das war's auch schon in der Praxis. 64-Bit-Versionen von Vista / 7 verwenden ausgefeiltere Sicherheitsfunktionen, um wichtige Komponenten in den Arbeitsspeicher zu verschieben. Dies ist jedoch als solches nicht wirklich erkennbar.

Von ChrisInEdmonton:

Ein 32-Bit-Betriebssystem auf einem ix86-System mit PAE kann bis zu 64 GB RAM adressieren. Ein 64-Bit-Betriebssystem auf x86-64 kann auf bis zu 256 TB virtuellen Adressraum zugreifen, obwohl dies in nachfolgenden Prozessoren auf bis zu 16 EB angehoben werden kann. Beachten Sie, dass einige Betriebssysteme den Adressraum weiter einschränken und die meisten Motherboards zusätzliche Einschränkungen haben.

Phoshi
quelle
4
Bei einem Betriebssystem bezieht sich NUR 32-Bit im Vergleich zu 64-Bit auf die Größe der Zeiger (was im ersten Absatz richtig erläutert wird). -1: Einige Betriebssysteme sperren die standardmäßige Ganzzahlgröße auf die Zeigergröße, aber weder Windows noch Linux. Die ganzzahlige mathematische Genauigkeit bleibt unverändert. NO weit verbreitetes Betriebssystem ändert die Gleitkommapräzision (was der zweite Absatz behauptet). "float" oder "single" ist 32-Bit, "double" ist 64-Bit, unabhängig davon, ob das Betriebssystem 32-Bit- oder 64-Bit-Zeiger verwendet.
Herr Fooz,
Ah, ich habe mich eindeutig geirrt, danke, dass
du das aufgeklärt hast
Kein Problem. -1 -> +1
Herr Fooz
Es kann sich lohnen, Ihre Antwort zu bearbeiten, um anzugeben, auf wie viel RAM zugegriffen werden kann. Ein 32-Bit-Betriebssystem auf einem ix86-System mit PAE kann bis zu 64 GB RAM adressieren. Ein 64-Bit-Betriebssystem auf x86-64 kann auf bis zu 256 TB virtuellen Adressraum zugreifen, obwohl dies in nachfolgenden Prozessoren auf bis zu 16 EB angehoben werden kann. Beachten Sie, dass einige Betriebssysteme den Adressraum weiter einschränken und die meisten Motherboards zusätzliche Einschränkungen haben.
ChrisInEdmonton
Ich wollte es einfach halten, da die Zahlen im Moment zumeist so hoch sind, dass sie keine Rolle spielen, aber es kann nicht schaden, sie jetzt festzuhalten.
Phoshi
14

Ich bin nicht sicher, ob ich alle Ihre Fragen beantworten kann, ohne einen ganzen Aufsatz zu schreiben (es gibt immer Google ...), aber Sie müssen Ihre Apps für 64-Bit nicht anders gestalten. Ich vermute, es wird darauf hingewiesen, dass Sie Dinge beachten müssen, bei denen die Zeigergröße nicht mehr der Größe von Ints entspricht. Und Sie haben eine ganze Menge potenzieller Probleme mit eingebauten Annahmen für bestimmte Datentypen mit einer Länge von vier Bytes, die möglicherweise nicht mehr zutreffen.

Dies kann in Ihrer Anwendung zu Problemen führen - vom Speichern / Laden aus einer Datei über das Durchlaufen von Daten, das Ausrichten von Daten bis hin zu bitweisen Vorgängen mit Daten. Wenn Sie eine vorhandene Codebasis haben, die Sie portieren möchten, oder an beiden arbeiten, müssen Sie wahrscheinlich viele kleine Probleme lösen.

Ich denke, dies ist ein Implementierungsproblem und kein Designproblem. Dh ich denke, das "Design" eines Fotobearbeitungspakets ist unabhängig von der Wortgröße gleich. Wir schreiben Code, der sowohl in der 32-Bit- als auch in der 64-Bit-Version kompiliert werden kann, und das Design unterscheidet sich sicherlich nicht zwischen beiden - es ist dieselbe Codebasis.

Die grundlegende "große Sache" bei 64-Bit ist, dass Sie auf einen viel größeren Speicheradressraum als 32-Bit zugreifen können. Dies bedeutet, dass Sie wirklich mehr als 4 GB Speicher in Ihren Computer einbauen können und tatsächlich einen Unterschied machen müssen.

Ich bin sicher, dass andere Antworten mehr auf Details und Vorteile eingehen werden als ich.

Um den Unterschied dann programmatisch zu erkennen, prüfen Sie einfach die Größe eines Zeigers (z. B. sizeof (void *)). Die Antwort 4 bedeutet 32 ​​Bit und 8 bedeutet, dass Sie in einer 64-Bit-Umgebung arbeiten.

Greg Whitfield
quelle
4
Wenn Sie Programme schreiben, die gelegentlich davon ausgehen, dass bestimmte Zeigertypen die gleiche Größe wie bestimmte Integraltypen haben, müssen Sie sie ausführen. Das ist schon lange so.
David Thornley
@ David: Du hast absolut recht. Leider gibt es eine Menge Code, der genau das tut.
10

Ein 32-Bit-Prozess verfügt über einen virtuellen Adressraum von 4 GB. Dies könnte für einige Apps zu wenig sein. Eine 64-Bit-App verfügt über einen praktisch unbegrenzten Adressraum (natürlich ist dieser begrenzt, aber Sie werden diesen Grenzwert höchstwahrscheinlich nicht erreichen).

Unter OSX gibt es noch weitere Vorteile. Lesen Sie den folgenden Artikel , warum die Ausführung des Kernels im 64-Bit-Adressraum (unabhängig davon, ob Ihre App auf 64 oder 32 läuft) oder die Ausführung Ihrer App im 64-Bit-Adressraum (während der Kernel noch 32 Bit hat) zu einer viel besseren Leistung führt. Zusammenfassend lässt sich sagen, dass der TLB ("Translation Lookaside Buffer") nicht gelöscht werden muss, wenn Sie vom Kernel auf die Verwendung von Speicherplatz und zurück umschalten (was die Geschwindigkeit erhöht) RAM-Zugriff).

Außerdem haben Sie Leistungsgewinne, wenn Sie mit "long long int" -Variablen arbeiten (64-Bit-Variablen wie uint64_t). Eine 32-Bit-CPU kann zwei 64-Bit-Werte addieren / dividieren / subtrahieren / multiplizieren, jedoch nicht in einem einzigen Hardware-Vorgang. Stattdessen muss diese Operation in zwei (oder mehr) 32-Bit-Operationen aufgeteilt werden. Eine App, die viel mit 64-Bit-Zahlen arbeitet, kann also schneller 64-Bit-Berechnungen direkt in der Hardware durchführen.

Last but not least bietet die x86-64-Architektur mehr Register als die klassischen x86-Architekturen. Das Arbeiten mit Registern ist viel schneller als das Arbeiten mit RAM. Je mehr Register die CPU hat, desto seltener muss sie Registerwerte in RAM und zurück in Register tauschen.

Um herauszufinden, ob Ihre CPU im 64-Bit-Modus ausgeführt werden kann, können Sie verschiedene sysctl-Variablen betrachten. ZB ein Terminal öffnen und tippen

sysctl machdep.cpu.extfeatures

Wenn EM64T aufgeführt ist, unterstützt Ihre CPU den 64-Bit-Adressraum gemäß dem x86-64-Standard. Sie können auch suchen

sysctl hw.optional.x86_64

Wenn 1 (wahr / aktiviert) angezeigt wird, unterstützt Ihre CPU den x86-64-Bit-Modus. Wenn 0 (falsch / deaktiviert) angezeigt wird, wird dies nicht angezeigt. Wenn die Einstellung überhaupt nicht gefunden wird, halten Sie sie für falsch.

Hinweis: Sie können sysctl-Variablen auch aus einer nativen C-App abrufen, ohne das Befehlszeilentool verwenden zu müssen. Sehen

man 3 sysctl
Mecki
quelle
Fehler: "machdep.cpu.extfeatures" ist ein unbekannter Schlüssel
Ich denke, es heißt nicht EM64T, auch wenn Sie nicht das Pech haben, Informationen zu haben.
9

Beachten Sie, dass der Adressraum für mehr als (echten) Speicher verwendet werden kann. Man kann auch große Dateien speicherbilden, was die Leistung bei ungeradzahligen Zugriffsmustern verbessern kann, da das leistungsstärkere und effizientere Caching auf Blockebene auf VM-Ebene einsetzt. Es ist auch sicherer, große Speicherblöcke auf 64-Bit-Basis zuzuweisen, da der Heapmanager geringer ist Es ist wahrscheinlich, dass eine Adressraumfragmentierung auftritt, die es nicht ermöglicht, einen großen Block zuzuweisen.

Einige der in diesem Thread genannten Dinge (wie das Verdoppeln von # -Registern) gelten nur für x86-> x86_64, nicht für 64-Bit im Allgemeinen. Genau wie die Tatsache, dass man unter x86_64 garantiert SSE2, 686 Opcodes und einen billigen Weg hat, PIC zu machen. Bei diesen Funktionen handelt es sich streng genommen nicht um 64-Bit-Funktionen, sondern um das Ausschneiden von Legacy-Funktionen und das Beheben bekannter x86-Einschränkungen

Außerdem wird häufig darauf hingewiesen, dass das Verdoppeln von Registern die Ursache für die Beschleunigung ist, während es wahrscheinlicher ist, dass die standardmäßige Verwendung von SSE2 den Trick macht (Beschleunigen von memcpy und ähnlichen Funktionen). Wenn Sie denselben Satz für x86 aktivieren, ist der Unterschied viel geringer. (*) (***)

Bedenken Sie auch, dass es häufig zu einer anfänglichen Bestrafung kommt, da die durchschnittliche Datenstruktur nur deshalb zunimmt, weil die Größe eines Zeigers größer ist. Dies hat auch Cache-Effekte, ist jedoch deutlicher darin zu sehen, dass der durchschnittliche memcpy () (oder was auch immer das Äquivalent für die Speicherkopie in Ihrer Sprache ist) länger dauern wird. Dies ist nur in der Größenordnung von ein paar Prozent, aber die oben genannten Beschleunigungen sind auch in dieser Größenordnung.

In der Regel ist der Ausrichtungsaufwand bei 64-Bit-Architekturen ebenfalls höher (Aufzeichnungen, die zuvor 32-Bit-Werte enthielten, werden häufig nur zu einer Mischung aus 32-Bit- und 64-Bit-Werten), wodurch Strukturen noch mehr in die Luft gejagt werden.

Insgesamt zeigen meine einfachen Tests, dass sie sich grob aufheben werden, wenn Treiber und Laufzeitbibliotheken vollständig angepasst wurden, was für die durchschnittliche App keinen signifikanten Geschwindigkeitsunterschied ergibt. Einige Apps können jedoch plötzlich schneller (z. B. abhängig von AES) oder langsamer werden (wichtige Datenstruktur wird ständig verschoben / gescannt / durchlaufen und enthält viele Zeiger). Die Tests wurden jedoch unter Windows durchgeführt, sodass die PIC-Optimierung nicht bewertet wurde.

Beachten Sie, dass die meisten JIT-VM-Sprachen (Java, .NET) im Durchschnitt (intern) deutlich mehr Zeiger verwenden als z. B. C ++. Wahrscheinlich steigt ihr Speicherbedarf mehr als bei einem durchschnittlichen Programm, aber ich wage es nicht, dies direkt mit Verlangsamungseffekten gleichzusetzen (da diese wirklich komplex und unkonventionell sind und ohne Messung oft schwer vorherzusagen sind).

Windows 64-Bit verwendet standardmäßig SSE2 für Gleitkommazahlen, wodurch einfache Vorgänge beschleunigt und komplexe Vorgänge (sin, cos usw.) verlangsamt werden.

(*) Eine wenig bekannte Tatsache ist, dass sich die Anzahl der SSE-Register im 64-Bit-Modus ebenfalls verdoppelt

(**) Dr. Dobbs hatte vor ein paar Jahren einen schönen Artikel darüber.

Marco van de Voort
quelle
8

Neben den offensichtlichen Speicherplatzproblemen, die die meisten Leute hier ansprechen, ist es meiner Meinung nach wert, sich den Begriff "Broadword Computing" anzuschauen, über den Knuth (unter anderem) in letzter Zeit gesprochen hat. Durch Bit-Manipulation kann eine Menge Effizienz gewonnen werden, und bitweise Operationen an einem 64-Bit-Wort gehen viel weiter als an einem 32-Bit-Wort. Kurz gesagt, Sie können mehr Operationen in Registern ausführen, ohne auf den Speicher zugreifen zu müssen, und aus Sicht der Leistung ist dies ein ziemlich großer Gewinn.

In Band 4 vor Fascicle 1A finden Sie einige Beispiele für die coolen Tricks, über die ich spreche.


quelle
7

Abgesehen von der Fähigkeit, mehr Speicher zu adressieren, verfügt x86_64 auch über mehr Register, die es dem Compiler ermöglichen, effizienteren Code zu generieren. Die Leistungsverbesserung ist jedoch normalerweise relativ gering.

Die x86_64-Architektur ist abwärtskompatibel mit x86. Es ist möglich, unveränderte 32-Bit-Betriebssysteme auszuführen. Es ist auch möglich, unveränderte 32-Bit-Software unter einem 64-Bit-Betriebssystem auszuführen. Dafür sind jedoch alle üblichen 32-Bit-Bibliotheken erforderlich. Sie müssen möglicherweise separat installiert werden.

Kristof Provost
quelle
Weitere Register und ein überarbeitetes ABI (Passing Function Args in Register) bedeuten normalerweise eine 10 bis 15% ige Beschleunigung, was ziemlich anständig ist. Es gibt jetzt eine x32-Linux-ABI mit 32-Bit-Zeigern, die jedoch den langen amd64-Modus und die Aufrufkonventionen args-in-register verwendet. So haben Sie alle Geschwindigkeitsvorteile von amd64, aber ohne den Aufwand, 64 Bit für jeden Zeiger zu benötigen. Es ist gut für alles, was nicht mehr als 4 GB (virtuellen) Speicher benötigt.
Peter Cordes
6

Dieser Thread ist schon zu lang, aber ...

Die meisten Antworten konzentrieren sich auf die Tatsache, dass Sie über einen größeren 64-Bit-Adressraum verfügen, sodass Sie mehr Speicher adressieren können. Für etwa 99% aller Anwendungen ist dies völlig irrelevant. Großer Whoop.

Der wahre Grund, warum 64-Bit gut ist , ist nicht, dass die Register größer sind, aber es gibt doppelt so viele! Dies bedeutet, dass der Compiler mehr Ihrer Werte im Register behalten kann, anstatt sie in den Speicher zu verschieben und sie in wenigen Anweisungen später wieder zu laden. Wenn ein optimierender Compiler Ihre Schleifen für Sie abwickelt, kann er sie ungefähr doppelt so oft abwickeln, was die Leistung erheblich verbessern kann.

Außerdem wurden die Konventionen für Unterprogrammaufrufer / Angerufene für 64-Bit definiert, um die meisten übergebenen Parameter in Registern zu halten, anstatt dass der Aufrufer sie auf den Stapel schiebt und der Angerufene sie abspringt.

So wird eine "typische" C / C ++ - Anwendung etwa 10% oder 15% mehr Leistung erzielen, wenn sie nur für 64-Bit neu kompiliert wird. (Angenommen, ein Teil der App ist rechnergebunden. Dies ist natürlich nicht garantiert. Alle Computer warten mit der gleichen Geschwindigkeit. Ihr Kilometerstand kann variieren.)

Stirb in Sente
quelle
Während der Befehlssatz für x64 besser ist als für x86, ist dies normalerweise unwichtig. 64-Bit-Code ist möglicherweise langsamer als 32-Bit-Code, da die Anweisungen möglicherweise größer werden und daher weniger in den Cache passen. (Schleifen abzurollen, BTW, ist heutzutage eine sehr fragwürdige Technik, da es die Anzahl der Cache-Fehlschläge erhöht.) Wo ich arbeite, benötigen wir 64 Bits für eine erhöhte Speicheradressierung.
David Thornley
David, Die x64- und x86-Befehlssätze sind bis auf die Operandengröße und einige Registerpräfixe fast identisch. Mit IA64, auch bekannt als Itanium aka Itanic, sind 64-Bit-Codes in der Regel dreimal so groß wie x86-Codes und belasten den Anweisungs-Cache genau so, wie Sie es sagen. Das war ein großer Grund, warum diese Architektur kläglich versagte. Bei x86 aka AMD64 aka EM64T beträgt dieses Codewachstum jedoch in der Regel nur 10-20%.
Obwohl x64 mehr Register adressierbar macht , bin ich mir nicht sicher, um wie viel es tatsächlich die Anzahl der verfügbaren physischen Register erhöht - alle neueren x86-Prozessoren haben viele (> 100) "Schatten" -Register und verwenden "Registerumbenennung" + spekulative Ausführung unabhängige Codepfade parallel zu einem Grad ausführen zu lassen. Wenn n unabhängige Codepfade ausgeführt werden, sind n-mal so viele Register verfügbar (bis alle Schattenregister leer sind).
@j_random_hacker. Sie haben absolut Recht, dass diese Tricks unter der Architektur vor sich gehen. Unabhängig davon, wie viele Schattenregister verfügbar sind, muss der Compiler die Anweisungen zum Speichern / Neuladen generieren , wenn das Programm mit mehr als 8 Datenelementen arbeiten muss und nur 8 Register im Befehlssatz verfügbar sind . Also ja, X64 macht wirklich doppelt so viele Register "verfügbar"
Meiner Erfahrung nach ist dies viel weniger und wird durch die Tatsache ausgeglichen, dass der zu verschiebende durchschnittliche Memblock größer ist.
Marco van de Voort
6

Neben den bereits genannten Vorteilen gibt es hier noch einige weitere Sicherheitsaspekte:

  • x86_64-CPUs haben das No-Execute-Bit in ihren Seitentabellen. Das heißt, dies kann Sicherheitslücken verhindern, die durch Pufferüberläufe verursacht werden. 32-Bit x86-CPUs unterstützen diese Funktion nur im PAE-Modus.
  • Ein größerer Adressraum ermöglicht eine bessere Randomisierung des Adressraum-Layouts (ASLR), wodurch die Ausnutzung von Pufferüberläufen erschwert wird.
  • x86_64-CPU-Leistungsmerkmal positionsunabhängiger Code, dh Datenzugriff relativ zum Befehlszeigerregister (RIP).

Ein weiterer Vorteil ist, dass der vmalloc()im Linux-Kernel zugewiesene virtuelle zusammenhängende Speicher im 64-Bit-Modus größer sein kann.

knweiss
quelle
5

Mit einer 32-Bit-Maschine können Sie nur 4.294.967.295 Byte Speicher adressieren. Auf einem 64-Bit-Computer stehen 1.84467441 × 10 ^ 19 Byte Arbeitsspeicher zur Verfügung.

Wikipedia sagt das

64-Bit-Prozessoren berechnen bestimmte Aufgaben (z. B. Fakultäten großer Zahlen) doppelt so schnell wie in 32-Bit-Umgebungen (das angegebene Beispiel ergibt sich aus dem Vergleich zwischen 32-Bit- und 64-Bit-Windows-Rechner; erkennbar an Fakultäten von z. B. 100 000) ). Dies vermittelt einen allgemeinen Eindruck der theoretischen Möglichkeiten von 64-Bit-optimierten Anwendungen.

Während 64-Bit-Architekturen die Arbeit mit großen Datenmengen in Anwendungen wie digitalem Video, wissenschaftlichem Rechnen und großen Datenbanken unbestreitbar erleichtern, gab es erhebliche Debatten darüber, ob sie oder ihre 32-Bit-Kompatibilitätsmodi schneller sind als vergleichbar günstig 32-Bit-Systeme für andere Aufgaben. In der x86-64-Architektur (AMD64) können die meisten 32-Bit-Betriebssysteme und -Anwendungen problemlos auf der 64-Bit-Hardware ausgeführt werden.

Die virtuellen 64-Bit-Java-Maschinen von Sun starten langsamer als die virtuellen 32-Bit-Maschinen, da Sun nur den "Server" -JIT-Compiler (C2) für 64-Bit-Plattformen implementiert hat. [9] Der "Client" -JIT-Compiler (C1), der weniger effizienten Code erzeugt, aber viel schneller kompiliert, ist auf 64-Bit-Plattformen nicht verfügbar.

Es ist zu beachten, dass Geschwindigkeit nicht der einzige Faktor ist, der beim Vergleich von 32-Bit- und 64-Bit-Prozessoren berücksichtigt werden muss. Anwendungen wie Multitasking, Stresstests und Clustering (für Hochleistungs-Computing), HPC, sind bei richtiger Bereitstellung möglicherweise besser für eine 64-Bit-Architektur geeignet. Aus diesem Grund sind 64-Bit-Cluster in großen Unternehmen wie IBM, HP und Microsoft weit verbreitet.

Mark Cidade
quelle
2
Die Buslänge der physischen Adresse ist unabhängig davon, ob es sich um einen 32- oder 64-Bit-Prozessor handelt. Einige 32-Bit-Prozessoren verfügen über Adressbusse, die größer als 32 Bit sind, und kein 64-Bit-Prozessor verfügt über einen 64-Bit-Adressbus.
1
Einverstanden. Theoretisch ist der Adressraum 2 ^ 64. In der Praxis verwenden CPU-Hersteller kleinere Werte wie 2 ^ 40 oder 2 ^ 48.
Stu Thompson
5

Zitat von Microsoft.com:

In der folgenden Tabelle werden die erhöhten maximalen Ressourcen von Computern, die auf 64-Bit-Versionen von Windows und dem 64-Bit-Intel-Prozessor basieren, mit den vorhandenen 32-Bit-Ressourcenmaxima verglichen.

MS-Tisch

Mehper C. Palavuzlar
quelle
2
Interessant, aber erwähnenswert, dass einige 32-Bit-Versionen von Windows mehr physischen Speicher ermöglichen. Siehe zum Beispiel en.wikipedia.org/wiki/…
ChrisInEdmonton
@ChrisInEdmonton Das System unterstützt zwar mehr als 4 GB oder mehr Arbeitsspeicher, die Adresse für jeden Prozess ist jedoch auf 2 GB begrenzt (3 GB bei großen Adressen). Selbst wenn Ihr System über viel Arbeitsspeicher verfügt, hilft es nicht, Programme mit großem Arbeitsspeicher zu verwenden, und die Leistung bleibt hinter der 64-Bit-Version zurück. Außerdem hat es einen viel kleineren Adressbereich für ASLR- und speicherabgebildete Dateien
phuclv
4

Kristof und Poshi haben die wichtigsten technischen Unterschiede zwischen 32- und 64-Bit-Betriebssystemen angegeben. Die Benutzererfahrung unterscheidet sich normalerweise stark von der Theorie. Die 64-Bit-Consumer-Versionen von Windows (XP und Vista) weisen große Lücken in der Treiberunterstützung auf. Ich hatte viele Drucker, Scanner und andere externe Geräte, die mit den 64-Bit-Versionen, die mit 32-Bit-Versionen gut funktionieren, überhaupt nicht funktionieren. Dies sind Geräte mit 64-Bit-Treibern, die immer noch nicht funktionieren. An dieser Stelle würde ich empfehlen, dass Sie sich von allen 64-Bit-Konsumenten von Microsoft fernhalten, bis Sie erfahren, wie Windows 7 damit umgeht, und zwar von echten Endbenutzern, nicht nur von denjenigen, die derzeit Zugriff darauf haben. Geben Sie es mindestens 6 Monate und sehen Sie, was die Leute erleben.

Kevin K
quelle
Es gibt vielleicht weniger Treiber, aber es ist nicht ganz so schlimm, wie es klingt. Ich habe 64-Bit seit 2007 ausgeführt und hatte nie irgendwelche Schwierigkeiten. Allerdings habe ich keine undurchsichtigen oder alten Geräte angeschlossen.
RomanSt
1
Mein letzter mit Vista 64 Bit war ein brandneuer HP-Multifunktionsdrucker, der erst letzten Monat auf einem 2 Monate alten Dell-System eingesetzt wurde. Sowohl Dell als auch HP gaben auf und mein Kunde bezahlte mich, um XP Pro zu installieren und Vista loszuwerden. Keine der Einheiten ist dunkel.
Kevin K
1
Wenn Sie einen Computer mit einem 64-Bit-Betriebssystem kaufen, funktioniert in der Regel alles. Ich würde vorsichtig sein, bevor ich versuche, einen älteren Computer zu aktualisieren, oder wenn ich einen älteren Drucker hätte, oder wenn ich selbst ein Upgrade durchführen möchte.
David Thornley
Hardware, die Works with Windows oder Certified für die Verwendung mit Windows- Logos verwenden möchte, muss 64-Bit-Treiber bieten. Vielleicht suchen Sie das nächste Mal. In der Tat kümmern sich Anbieter manchmal nicht um Consumer-Hardware, da die meisten Kunden wahrscheinlich immer noch mit 32-Bit arbeiten.
Joey
2

Einige Spielprogramme verwenden eine Bit-Board- Darstellung. Schach, Dame und Othello haben beispielsweise eine 8x8-Tafel, dh 64 Felder, so dass mindestens 64 Bits in einem Maschinenwort die Leistung erheblich verbessern.

Ich erinnere mich an ein Schachprogramm, dessen 64-Bit-Version fast doppelt so schnell war wie die 32-Bit-Version.

Hugh Allen
quelle
2

Der Begriff 32-Bit und 64-Bit bezieht sich auf die Art und Weise, wie ein Computerprozessor (auch als CPU bezeichnet) mit Informationen umgeht. 64-Bit-Versionen von Windows verarbeiten große Mengen an Arbeitsspeicher (RAM) effektiver als 32-Bit-Systeme.

geschwindigkeit kann meiner meinung nach unterschiedlich sein

LestiWulan
quelle
1

Ein weiterer Punkt in Bezug auf Microsoft Windows ist, dass es seit vielen Jahren die Win32-API gibt, die für 32-Bit-Betriebssysteme vorgesehen und nicht für das Kompilieren mit 64-Bit optimiert ist. Wenn ich einige DLLs für meine Anwendungen schreibe, kompiliere ich im Allgemeinen in Win32, was nicht die 64-Bit-Version der Dinge ist. Vor Vista gab es meines Erachtens nicht viele erfolgreiche 64-Bit-Versionen von Windows. Meiner Meinung nach verfügt mein neuer Computer über 4 GB RAM, aber ich verwende immer noch 32-Bit-Windows XP Pro, da es sich um ein bekanntes stabiles Betriebssystem handelt. S relativ zu XP64 oder Vista.

Ich denke, Sie möchten vielleicht auch auf die Zeit zurückblicken, als die Umstellung von 16-Bit auf 32-Bit stattfand, um mehr darüber zu erfahren, warum die Umstellung für einige Leute eine große Sache sein könnte. Die geschäftskritischen Anwendungen, die ein Unternehmen möglicherweise auf einem Desktop ausführt, z. B. kleine Buchhaltungspakete, können möglicherweise nicht auf einem 64-Bit-Betriebssystem ausgeführt werden. Daher muss eine ältere Maschine virtuell oder real verfügbar sein.

Das Ändern der Größe einer Adresse kann erhebliche Auswirkungen und Auswirkungen haben.

JB King
quelle
1

Für die meisten praktischen Zwecke werden Sie wahrscheinlich keinen Unterschied bemerken.

Sie benötigen eine 64-Bit-CPU (die meisten CPUs in den letzten Jahren), um ein 64-Bit-Betriebssystem zu installieren.

Ein 64-Bit-Betriebssystem bietet einige Vorteile:

  • Damit können Sie mehr als 4 GB RAM ausführen (die maximale Anzahl, die Sie in einem 32-Bit-Betriebssystem adressieren können, beträgt 2 ^ 32 = 4 GB).
  • Es ist hilfreich, um mit großen Datenmengen (z. B. in Excel) und bestimmten rechenintensiven Aufgaben (z. B. Photoshop und große Dateien) zu arbeiten.
  • Sie können ein 64-Bit-Programm nur auf einem 64-Bit-Betriebssystem ausführen, aber Sie können auf beiden ein 32-Bit-Programm ausführen (denken Sie daran, dass viele Programme beide Programme enthalten, sodass es nicht zu viele 64-Bit-Programme gibt Programme).

In den meisten Szenarien belegen 64-Bit-Programme etwas mehr Speicher. Bei einem PC wird dies jedoch normalerweise nicht bemerkt.

cyberx86
quelle