32-Bit- gegenüber 64-Bit-Systemen

50198
Mehper C. Palavuzlar

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

Wenn Sie beide verwendet haben, welche scharfen Unterschiede haben Sie erlebt?

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

219
Hier gibt es viele Verwirrungen, und an anderen Stellen, an denen im Web zwischen physischer Adressierung (Zugriff auf RAM), PEA dies, Mutterplatine und logischer Adressierung (virtueller Speicher pro Prozess) betroffen sind. Bei einem 32-Bit-Betriebssystem ist der virtuelle Speicher auf 4 GB minus den vom Kernel reservierten Speicher begrenzt. Es ist unabhängig vom RAM, Sie könnten 0,1 MB oder 8 GB RAM haben, und Sie würden genau 4 GB virtuellen Speicher haben (einige davon jedoch vom Kernel reserviert). PEA kann verwendet werden, um mehr RAM zu haben, ist aber keine perfekte Antwort, da der Kernel NICHT auf alles zugreifen kann. ctrl-alt-delor vor 11 Jahren 0

19 Antworten auf die Frage

262
Mr Fooz

Hinweis: Diese Antworten gelten für x86-basierte Standard-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 Kompromisse haben.

Aus technischer Sicht bietet ein 64-Bit-Betriebssystem:

  • Einzelne Prozesse können jeweils mehr als 4 GB RAM adressieren (in der Praxis begrenzen die meisten, aber nicht alle 32-Bit-Betriebssysteme den gesamten verfügbaren System-RAM auf weniger als 4 GB, nicht nur auf das Maximum pro Anwendung).

  • Alle Zeiger benötigen 8 Bytes anstelle von 4 Bytes. Die Auswirkung auf die RAM-Auslastung ist minimal (weil Sie wahrscheinlich nicht über eine Anwendung verfügen, die mit Gigabyte von Zeigern gefüllt ist), im schlimmsten Fall kann dies jedoch dazu führen, dass der CPU-Cache 1/2 so viele Zeiger halten kann (make.) es ist effektiv 1/2 die Größe). Für die meisten Anwendungen ist dies keine große Sache.

  • Im 64-Bit-Modus gibt es viele weitere Universal-CPU-Register. Register sind der schnellste Speicher in Ihrem gesamten System. Es gibt nur 8 im 32-Bit-Modus und 16 Universalregister im 64-Bit-Modus. Bei wissenschaftlichen Computeranwendungen, die ich geschrieben habe, habe ich durch die Neukompilierung im 64-Bit-Modus eine Leistungssteigerung von bis zu 30% gesehen (meine Anwendung könnte die zusätzlichen Register wirklich verwenden).

  • Die meisten 32-Bit-Betriebssysteme lassen tatsächlich nur zwei GB RAM für einzelne Anwendungen zu, selbst wenn 4 GB installiert sind. Dies liegt daran, dass die anderen 2 GB Adressraum für die gemeinsame Nutzung von Daten zwischen Anwendungen, für das Betriebssystem und 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 gemeinsam einstellen. Dies kann jedoch bei einigen Anwendungen zu Problemen führen, die die Änderung nicht erwarten. Ich vermute auch, dass eine Grafikkarte mit 1 GB RAM möglicherweise beschädigt wird (aber ich bin mir nicht sicher). Mit einem 64-Bit-Betriebssystem können einzelne 32-Bit-Anwendungen näher an die vollen 4 GB herankommen.

Aus Benutzersicht:

  • Die Anwendungsgeschwindigkeit ist normalerweise für eine 64-Bit-Anwendung in einem 64-Bit-Betriebssystem im Vergleich zu der 32-Bit-Version der Anwendung auf einem 32-Bit-Betriebssystem höher, aber die meisten Benutzer werden diese Beschleunigung nicht bemerken. Die meisten Anwendungen für Normalbenutzer nutzen die zusätzlichen Register nicht wirklich oder die Vorteile werden durch größere Zeiger ausgeglichen, die den Cache füllen.

  • Wenn Sie über Speicher-Hog-Anwendungen verfügen (z. B. Foto-Editoren, Videobearbeitung, Scientific Computing usw.), wenn Sie mehr als 3 GB RAM haben (oder kaufen können) und Sie eine 64-Bit-Version der Anwendung erhalten, Die Wahl ist einfach: Verwenden Sie das 64-Bit-Betriebssystem.

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

  • Wenn Sie so viele Anwendungen gleichzeitig ausführen, dass Ihnen der RAM-Speicher ausgeht (in der Regel können Sie dies feststellen, weil Ihr Computer langsam wird und Sie hören, wie das Festplattenlaufwerk krampft), dann sollten Sie ein 64-Bit-Betriebssystem verwenden (und ausreichend RAM).

  • Sie können 32-Bit-Anwendungen (aber keine Treiber) unter 64-Bit-Windows ohne Probleme ausführen. Die größte Verlangsamung, die ich für eine 32-Bit-Anwendung in 64-Bit-Windows gemessen habe, liegt bei etwa 5% (dh, wenn in 32-Bit-Windows 60 Sekunden benötigt wurden, dauerte dies mit 60 * 1,05 = 65 Sekunden.) die gleiche 32-Bit-Anwendung in 64-Bit-Windows).

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

Bei x86-Systemen bezieht sich 32-Bit vs. 64-Bit direkt auf die Größe von Zeigern. 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 der gängigen Compiler entscheiden sich für 32-Bit intauf 64-Bit-Systemen.

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

  • Sie bezieht sich nicht direkt auf die Größe des Bus für physikalische Adressen. Beispielsweise benötigt ein System mit 64 Bit breiten Cache-Zeilen und maximal 512 GB Speicher nur 33 Bit in seinem Adreßbus (dh log2(512*1024**3) - log2(64) = 33).

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

Sehr gute Antwort Vor allem, weil Sie festgestellt haben, dass es eigentlich keine 4-GB-RAM-Grenze gibt, sondern die Speicherbelegung der Prozesse. Nur zu Ihrer Information, ich denke, Sie sollten sich diesen Link ansehen: http://www.unawave.de/windows-7-tipps/32-bit-ram-barrier.html?lang=DE Breakthrough vor 14 Jahren 8
Dies sind Anwendungen, die auf 64-Bit-Fenstern nicht funktionieren: 16-Bit-Anwendungen / Anwendungen, die 32-Bit-Treiber oder nicht signierte Kernelmodustreiber verwenden. Das ist viel für einen Software-Süchtigen wie mich ... fluxtendu vor 14 Jahren 8
@flextendu, angesichts der Leistungsanforderungen dieser alten Programme könnten Sie sie fast sicher in einer virtuellen Maschine ausführen. Mit VMware Player, Virtual PC und Virtual Box gibt es keinen Grund, einen von ihnen nicht auszuprobieren, wenn Sie über eine 32-Bit-Windows-Lizenz verfügen. Wenn Sie sich nicht damit beschäftigen möchten, funktionieren sie wahrscheinlich auch im "Windows XP-Modus". Mark Booth vor 14 Jahren 1
Übrigens, 32-Bit-Anwendungen verwenden nicht mehr als 2 GB RAM, es sei denn, in ihrem Manifest ist ein bestimmtes Flag aktiviert. Quelle: http://blogs.technet.com/b/markrussinovich/archive/2008/11/17/3155406.aspx Hello71 vor 13 Jahren 6
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 vor 13 Jahren 0
@Breakthough, Sie sollten die Benutzer warnen, bevor Sie Links zu Websites mit NSFW-Werbung herstellen. Dan Neely vor 13 Jahren 0
Gute Erklärung. 32-Bit-Linux kann einzelne Apps über einen eigenen (fast) 4-GB-Speicherplatz verfügen. Ich glaube nicht, dass Windows das erlaubt. Rich Homolka vor 13 Jahren 0
Es kann auch sinnvoll sein, zu erwähnen, worauf sich der Bitwert bezieht. Ich habe Argumente gehört, die sagen, es sei die GP-Registergröße, der Adressierbus oder die Datenbusgröße. jiggunjer vor 8 Jahren 0
@jiggunjer gute Idee. Neuer Abschnitt hinzugefügt. Mr Fooz vor 8 Jahren 0
Nur eine pedantische Bemerkung, damit die Leute die Formel nicht blind benutzen, ohne zu prüfen: 1 / 0.x entspricht nicht 1+ (100-x)% - zB 4 / 0,75 ist nicht 5 (aka 4 + 25%) aber 5.333; 60 / 0,95 ist ~ 63,1579, während 60 + 5% genau 63 sind. Banderi vor 6 Jahren 0
@Banderi guter Punkt. Ich kann mich nicht erinnern, ob die reellen Zahlen 60 vs 65 oder 60 vs 63 waren. Daher habe ich den Post so aktualisiert, dass er den schlechtesten Wert (65) annimmt, während die Mathematik mehr Standardbenennungskonventionen folgt. Mr Fooz vor 6 Jahren 0
Wenn einige sagen, dass 64-Bit-Systeme Daten schneller verarbeiten können, verstehe ich das nicht. Soweit ich weiß, wenn Sie sich in einem 32-Bit-System befinden, lädt der Prozessor immer noch Speicherseiten (in den Cache) mit der gesamten Breite des Datenbusses. Wenn man bedenkt, dass Speicher-E / A das ist, was eine Anwendung verlangsamen kann, wären 32-Bit-Systeme nicht etwas schneller? Insbesondere Apps, die E / A-intensiv und nicht rechenintensiv sind (zusätzliche Register helfen nicht viel). Jeach vor 5 Jahren 0
@Jeach Ja, es gibt Fälle, in denen 32-Bit-Prozesse auf Intel schneller sein können als 64-Bit-Prozesse. Wenn Ihre Anwendung die zusätzlichen Register nicht ausnutzt, viele Zeigerverfolgungsjagden durchführt, die den größten Teil des Caches verwenden, und / oder tonnenweise Maschinencode durchströmt, kann ein 32-Bit-Prozess schneller sein. Für eine breite Klasse von Anwendungen überwinden die zusätzlichen Register jedoch die Nachteile der Verdoppelung der Größe der Zeiger. Wie allgemein üblich, sollten Sie Ihre Anwendung als Benchmark verwenden, wenn Sie der Meinung sind, dass sie besser ist als 32-Bit. Mr Fooz vor 5 Jahren 0
107
Brian R. Bondy

Grundsätzlich können Sie alles in einem größeren 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 denken, dass dies nicht wichtig ist, führen Sie eine riesige MSSQL-Datenbank-intensive Anwendung aus. Es verwendet> 4 GB selbst, wenn Sie es zur Verfügung haben und viel besser laufen.
  3. Adressen: Adressen sind 64 Bit statt 32 Bit, so dass Sie "größere" Programme haben, die mehr Speicherplatz benötigen.
  4. Für Programme verfügbare Handles: Sie können weitere Datei-Handles, Prozesse erstellen. Zum Beispiel können Sie unter Windows x64> 2000 Threads pro Prozess erstellen, aber bei x86 näher an einigen hundert.
  5. Breitere Programme verfügbar: Von einem x64 aus können Sie x86- und x64-Programme ausführen. (Beispielfenster: wow64, windows32 unter der Windows64-Emulation)
  6. Emulationsoptionen: Von einem x64 aus können Sie sowohl x86- als auch x64-VMs ausführen.
  7. Schneller: Einige Berechnungen sind auf einer 64-Bit-CPU schneller
  8. Aufteilung mehrerer Systemressourcen: Viel RAM-Speicher ist sehr wichtig, wenn Sie mindestens eine VM ausführen möchten, die Ihre Systemressourcen aufteilt.
  9. Exklusive Programme verfügbar: Mehrere neue Programme unterstützen nur x64. Beispiel Exchange 2007.
  10. Zukünftig obsolete x86 ?: Im Laufe der Zeit werden immer mehr 64-Bit und mehr und mehr x86 nicht mehr verwendet. Die Hersteller unterstützen also immer mehr 64-Bit.

Die zwei großen Typen von 64-Bit-Architekturen sind x64- und IA64-Architekturen. Allerdings ist x64 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 vorgesehen. Es ist ein Emulator, aber in Hardware.

Wie @Phil erwähnt, kann man sich hier genauer ansehen, wie es funktioniert .

Äh. IA64 führt x86-Befehle aus. Es gibt jedoch keine SSE-Erweiterungen. Auf Itanium ist Hardware für die Ausführung von x86-Anweisungen vorgesehen. Es ist ein Emulator, aber in Hardware. tzot vor 15 Jahren 1
Vor einigen Jahren hat Raymond Chen über den Thread "limit" von 2000 berichtet, und es ist mehr oder weniger eine städtische Legende: http://blogs.msdn.com/oldnewthing/archive/2005/07/29/444912.aspx bk1e vor 15 Jahren 2
Für Arstechnica wurde ihre Erklärung bestätigt. Avihu Turzion vor 14 Jahren 0
Das RAM-Limit von 4 GB ist nicht ganz zutreffend (es ist eher ein künstliches Limit für Windows-Systeme von Heimanwendern), siehe [PAE] (http://en.wikipedia.org/wiki/Physical_Address_Extension). Bei der meisten aktuellen Hardware kann ein Linux-PAE-Kernel (der standardmäßig für 32 Bit verwendet wird) mehr als 4 GB adressieren. Gleiches gilt für FreeBSD und NetBSD. Izzy vor 11 Jahren 2
32-Bit-Systeme können wegen dieser "Adressen" (3. Punkt) nicht mehr als 4 GB (1. Punkt) verwenden. Weil die höchste 32-Bit-Zahl 4.294.967.296 (= 4 GB) beträgt. Ihre ersten und dritten Punkte sind also SAME. Sie können den dritten Punkt entfernen. :) Jet vor 10 Jahren 0
x64 und IA64 sind keine "** The ** 2 großen Typen von 64-Bit-Architekturen". Vor allem nicht IA64, nicht auf lange Sicht. Die UltraSparc- und IBM-Power-Architekturen von Sun Microsystems sind 64 Bit weit vor den Intel- oder AMD-Architekturen vorgedrungen und sind nach wie vor als Server-CPU-Familien (auf Oracle- bzw. IBM-Maschinen) bekannt. Was IA64 anbetrifft, so wurde es immer noch geboren, weil niemand in der Lage ist, anständige EPIC-Compiler herzustellen, obwohl HP Itanium eine Zeitlang mit sehr begrenztem Erfolg versuchte. Michael vor 9 Jahren 0
46

Die größte Auswirkung, die die Leute derzeit feststellen werden, ist, dass ein 32-Bit-PC nur maximal 4 GB Speicherplatz adressieren kann. Wenn Sie den vom Betriebssystem für andere Zwecke zugewiesenen Speicher entfernen, zeigt Ihr PC wahrscheinlich nur etwa 3,25 GB nutzbaren Speicher an. Gehen Sie zu 64bit über und dieses Limit verschwindet.

Wenn Sie sich ernsthaft weiterentwickeln, kann dies sehr wichtig sein. Führen Sie mehrere virtuelle Maschinen aus, und der Speicher ist bald erschöpft. Es ist wahrscheinlicher, dass Server zusätzlichen Speicher benötigen, und daher ist die 64-Bit-Nutzung auf Servern weitaus höher als auf Desktops. Das Moore-Gesetz sorgt dafür, dass immer mehr Speicher auf den Rechnern zur Verfügung steht. Desktops werden daher irgendwann auch standardmäßig auf 64 Bit umgestellt.

Eine ausführlichere Beschreibung der Prozessorunterschiede finden Sie in diesem ausgezeichneten Artikel von ArsTechnica .

Die 32-Bit-Plattform und die 4-GB-Einschränkung ist etwas irreführend und ist (war) hauptsächlich eine Betriebssystemauswahl / Entwurfsgrenze. Wirklich, die 4 GByte von 32 Bit sind in einem Prozess-VA-Bereich wirklich begrenzt. Die physische Adresse unterstützt 36-Bit-Prozessoren bei 32-Bit-Prozessoren von Intel Tall Jeff vor 15 Jahren 7
Sie machen einen guten Punkt, der sicherlich wahr ist. In der realen Welt der PC-Benutzer bedeutet dies jedoch, 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 von ihm bezahlten 4 GB nicht vollständig genutzt werden können. vor 15 Jahren 1
Schätzen Sie Ihren Standpunkt ein, aber wenn Sie versuchen, die Ansicht zu vertreiben, dass die Fehlerbehebung nicht im Prozessor oder auf 64-Bit erfolgt, handelt es sich lediglich um ein geringfügig verbessertes Betriebssystemdesign. Dies wird beispielsweise in den Enterprise-Versionen von Windows sogar in 32-Bit-Versionen angesprochen. Es ermöglicht 64 GB RAM. Tall Jeff vor 15 Jahren 2
Technisch gesehen verschwindet das Limit nicht. Es bewegt sich weiter dahin, wo es unpraktisch / unmöglich ist, so viel RAM zu jeder Zeit im nächsten Jahrzehnt auf einer Maschine zu installieren. vor 15 Jahren 0
Siehe meine Bemerkung zu [PAE] (http://en.wikipedia.org/wiki/Physical_Address_Extension) oben: Das 4-GB-Limit gilt nicht für das gesamte System, sondern gilt nur für einzelne Prozesse (kein Prozess kann auf 4 GB und mehr zugreifen.) selbst - aber das gesamte System, dh alle Prozesse zusammen, kann mit PAE aktiviert werden). Wenn Sie also keine Anwendungen haben, die von dem Zugriff auf 4 GB und mehr (wie Video-Editoren / Konverter mit großen Videodateien) ** und ** 8 GB + profitieren, sollte es keinen großen Unterschied machen, ob Sie 32-Bit oder 64-Bit verwenden. Izzy vor 11 Jahren 0
31
James

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. Für alle Zeiger, die früher 4 Bytes benötigten, werden jetzt 8 benötigt. Die Standardanforderung in Emacs ist beispielsweise 60% mehr Arbeitsspeicher, wenn er für eine 64-Bit-Architektur ausgelegt ist. Dieser zusätzliche Footprint schadet der Leistung auf jeder Ebene der Speicherhierarchie: Größere ausführbare Dateien benötigen mehr Zeit zum Laden von der Festplatte, größere Arbeitssätze führen zu mehr Seitenwechsel und größere Objekte bedeuten weniger Sitz in den Prozessor-Caches. Wenn Sie an eine CPU mit einem 16K-L1-Cache denken, kann eine 32-Bit-Anwendung mit 4096 Zeigern arbeiten, bevor sie verfehlt und in den L2-Cache wechselt. Eine 64-Bit-Anwendung muss jedoch bereits nach 2048 Zeigern nach dem L2-Cache greifen.

Bei x64 wird dies durch andere Architekturverbesserungen wie mehr Register gemindert, aber bei PowerPC kann die Anwendung> 4G nicht verwendet werden, wenn sie auf "ppc" schneller als "ppc64" ausgeführt wird. Sogar unter Intel gibt es Workloads, die unter x86 schneller laufen, und wenige laufen unter x64 um mehr als 5% schneller als x86.

Diese Antwort legt nahe, dass PowerPC64 nicht so gut wie x86-64 ist. Die Wahrheit ist, dass powerpc64 Powerpc nicht verbessert hat, da Powerpc nicht beschädigt wurde. ctrl-alt-delor vor 11 Jahren 2
Linux hat jetzt ein x32-ABI mit allen Geschwindigkeitsvorteilen von x86-64 (mehr Register, neu gestaltetes ABI), jedoch mit 32-Bit-Zeigern. +1 für den Hinweis, dass die Vorteile des 64-Bit-Modus nicht von der tatsächlichen Breitenvergrößerung abhängen, sondern von der Möglichkeit, einen Großteil des Gepäcks abzulegen, 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 vor 8 Jahren 3
19
Phoshi

Ein 64-Bit-Betriebssystem kann mehr RAM verwenden. Das ist es in der Praxis. Beim 64-Bit-Vista / 7-System werden die Sicherheitsfunktionen des RAM verwendet, die wichtige Komponenten enthalten. Dies ist jedoch nicht wirklich "auffällig".

Von ChrisInEdmonton:

Ein 32-Bit-Betriebssystem eines ix86-Systems 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, dies kann jedoch in nachfolgenden Prozessoren auf bis zu 16 EB erhöht werden. Beachten Sie, dass einige Betriebssysteme den Adressraum weiter einschränken, und für die meisten Motherboards gelten zusätzliche Einschränkungen.

For an OS, 32-bit versus 64-bit ONLY refers to the size of pointers (what your first paragraph correctly discusses). -1: Some OSes choose to lock the default integer size to the pointer size, but neither Windows nor Linux do so. Integer math precision is unchanged. NO widely-used OS changes the floating point precision (what the second paragraph claims). "float" or "single" is 32-bits, "double" is 64-bits, regardless of whether the OS uses 32-bit or 64-bit pointers. Mr Fooz vor 14 Jahren 4
Ah, ich habe mich eindeutig geirrt, danke, dass du das geklärt hast :) Phoshi vor 14 Jahren 0
No problem. -1 --> +1 Mr Fooz vor 14 Jahren 0
Es kann sich lohnen, Ihre Antwort zu bearbeiten, um anzugeben, wie viel RAM auf sie zugreift. Ein 32-Bit-Betriebssystem eines ix86-Systems 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, dies kann jedoch in nachfolgenden Prozessoren auf bis zu 16 EB erhöht werden. Beachten Sie, dass einige Betriebssysteme den Adressraum weiter einschränken, und für die meisten Motherboards gelten zusätzliche Einschränkungen. ChrisInEdmonton vor 14 Jahren 0
Ich wollte es einfach halten, da die Zahlen * meistens * hoch genug sind, um im Moment irrelevant zu sein, aber es kann nicht schaden, sie jetzt einzubinden. Phoshi vor 14 Jahren 0
Ein 32-Bit-Betriebssystem kann jedoch nicht mehr als 4 GB gleichzeitig adressieren. In der Regel sind dies 2-3 GB pro Anwendung. Dies bedeutet, dass es für mehrere Anwendungen mit jeweils 1-1,5 G geeignet sein kann, dass jedoch Probleme mit einer größeren auftreten können. David Thornley vor 14 Jahren 0
Eine 32-Bit-Architektur von IIRC kann einer Anwendung nur 2 GB, PAE und damit eine Erhöhung der Kapazität verleihen, aber es geht um eine Einschränkung der Architektur, daher neige ich dazu, sie nicht zu erwähnen. Der Punkt ist zwar gut, aber ich denke, es fällt unter "mehr RAM verwenden", denn sobald Sie 3 GB überschritten haben, werden Sie wahrscheinlich bald 64 Bit erreichen. Phoshi vor 14 Jahren 0
Fast, aber nicht ganz. Eine 32-Bit-Architektur kann pro Anwendung mehr als 2 GB leisten. Die ** Windows ** 32-Bit-Implementierung verwendet jedoch das High-Bit für eigene interne Daten. Es verbleiben 31 Bits für die Anwendung (2 31 ist 2GiB). Hennes vor 10 Jahren 0
14
Greg Whitfield

Ich bin nicht sicher, ob ich alle Ihre Fragen beantworten kann, ohne einen ganzen Aufsatz schreiben zu müssen (es gibt immer Google ...), aber Sie müssen Ihre Apps nicht für 64-Bit anders gestalten. Ich denke, auf was wird verwiesen, ist, dass Sie auf Dinge achten müssen, wie Zeigergrößen nicht mehr die gleiche Größe wie ints haben. Und Sie haben eine ganze Menge potenzieller Probleme mit eingebauten Annahmen für bestimmte Datentypen, die vier Byte lang sind und möglicherweise nicht mehr zutreffen.

Dies führt wahrscheinlich zu allen möglichen Dingen in Ihrer Anwendung - alles vom Speichern / Laden aus einer Datei über das Durchlaufen von Daten über die Datenausrichtung bis hin zu bitweisen Operationen an Daten. Wenn Sie über eine vorhandene Codebase verfügen, die Sie portieren möchten, oder Sie an beiden arbeiten, werden Sie wahrscheinlich viele kleine Probleme haben.

Ich denke, das ist ein Implementierungsproblem und kein Designproblem. Ich denke, das "Design" von zum Beispiel, ein Fotobearbeitungspaket wird dasselbe sein, egal wie groß die Wortgröße ist. Wir schreiben Code, der sowohl in 32-Bit- als auch in 64-Bit-Versionen kompiliert werden kann, und das Design unterscheidet sich sicherlich nicht zwischen den beiden - es ist dieselbe Codebase.

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

Ich bin mir sicher, dass andere Antworten mehr als ich in die Details und Vorteile einfließen werden.

Bei der Erkennung des Unterschieds prüfen Sie dann programmgesteuert nur die Größe eines Zeigers (z. B. sizeof (void *)). Die Antwort von 4 bedeutet 32 ​​Bit, und 8 bedeutet, dass Sie in einer 64-Bit-Umgebung arbeiten.

Wenn Sie Programme schreiben, die gelegentlich davon ausgehen, dass bestimmte Zeigertypen die gleiche Größe wie bestimmte Integraltypen haben, können Sie dies tun. Das ist schon lange so. David Thornley vor 15 Jahren 4
@ David: Du hast absolut recht. Leider gibt es eine Menge Code, der genau das tut. vor 14 Jahren 0
10
Mecki

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

Unter OSX gibt es weitere Vorteile. In dem folgenden Artikel wird beschrieben, warum der Kernel im 64-Bit-Adressraum (unabhängig davon, ob Ihre App 64 oder 32 ausführt) oder wenn Ihre App im 64-Bit-Adressraum (der Kernel ist noch 32 Bit) ausgeführt wird, zu einer deutlich besseren Leistung führt. Um es zusammenzufassen: Wenn eines davon 64 Bit (Kernel oder App oder natürlich beide) ist, muss der TLB ("Translation Lookaside Buffer") nicht gelöscht werden, wenn Sie vom Kernel wechseln, um Speicherplatz und zurück zu verwenden (was zu einer Beschleunigung führt.) RAM-Zugriff).

Bei der Arbeit mit "long long int" -Variablen (64-Bit-Variablen wie uint64_t) kommt es zu Leistungssteigerungen. Eine 32-Bit-CPU kann zwei 64-Bit-Werte hinzufügen / dividieren / subtrahieren / multiplizieren, jedoch nicht in einer einzelnen Hardwareoperation. Stattdessen muss diese Operation in zwei (oder mehr) 32-Bit-Operationen aufgeteilt werden. Eine App, die viel mit 64-Bit-Zahlen arbeitet, hat also einen Geschwindigkeitsgewinn, wenn sie 64-Bit-Berechnungen direkt in Hardware ausführen kann.

Nicht zuletzt 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 müssen Registerwerte in den RAM und wieder zurück in Register verschoben werden.

Um herauszufinden, ob Ihre CPU im 64-Bit-Modus laufen kann, können Sie verschiedene sysctl-Variablen betrachten. Öffnen Sie zB ein Terminal und geben Sie ein

sysctl machdep.cpu.extfeatures 

Wenn EM64T aufgelistet 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, ist dies nicht der Fall. Wenn die Einstellung überhaupt nicht gefunden wird, betrachten Sie sie als falsch.

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

man 3 sysctl 
Fehler: "machdep.cpu.extfeatures" ist ein unbekannter Schlüssel vor 14 Jahren 0
Ich nehme an, es heißt nicht EM64T, auch wenn Sie nicht unglücklich genug sind, um Informationen zu haben. vor 14 Jahren 0
9
Marco van de Voort

Beachten Sie, dass der Adressraum für mehr als (realen) Speicher verwendet werden kann. Man kann auch große Dateien speichern, die die Leistung bei mehr ungeraden Zugriffsmustern verbessern können, da die Zwischenspeicherung auf VM-Ebene auf VM-Ebene effizienter und effizienter ist. Es ist auch sicherer, große Speicherblöcke auf 64-Bit zuzuordnen, da der Heapmanager weniger ist Wahrscheinlich trifft eine Adressraum-Fragmentierung auf, die es nicht erlaubt, einen großen Block zuzuweisen.

Einige der Dinge, die in diesem Thread gesagt werden (wie die Verdoppelung 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 günstigen Weg hat, um PIC zu machen. Bei diesen Funktionen handelt es sich strikt nicht um 64-Bit, sondern um das Vermindern von Altlasten und die Beseitigung bekannter x86-Einschränkungen

Darüber hinaus weisen die Leute häufig auf eine Verdoppelung der Register als Ursache für die Beschleunigung hin, während die SSE2-Standardfunktion eher den Trick ausübt (Beschleunigung von Memcpy und ähnlichen Funktionen). Wenn Sie denselben Satz für x86 aktivieren, ist der Unterschied viel geringer. (*) (***)

Denken Sie auch daran, dass es häufig zu einer anfänglichen Strafe kommt, da die durchschnittliche Datenstruktur einfach zunimmt, weil die Größe eines Zeigers größer ist. Dies hat auch Cache-Effekte, ist jedoch deutlicher erkennbar in der Tatsache, dass der durchschnittliche Wert von memcpy () (oder was auch immer das Äquivalent für die Speicherkopie in Ihrer Sprache ist) länger dauert. Dies ist nur in der Größenordnung von wenigen Prozent, allerdings sind auch die oben genannten Beschleunigungen in dieser Größenordnung.

In der Regel ist der Ausrichtungs-Overhead bei 64-Bit-Architekturen ebenfalls größer (Datensätze, die zuvor 32-Bit waren, werden oft nur zu einer Mischung aus 32-Bit- und 64-Bit-Werten) und zerstören Strukturen zusätzlich.

Insgesamt zeigen meine einfachen Tests, dass sie sich annähernd gegenseitig aufheben, wenn Treiber und Laufzeitbibliotheken vollständig angepasst wurden, sodass sich für die durchschnittliche App kein signifikanter Geschwindigkeitsunterschied ergibt. Einige Apps können jedoch plötzlich schneller werden (z. B. in Abhängigkeit von AES) oder langsamer (wichtige Datenstrukturen werden ständig verschoben / gescannt / durchlaufen und enthalten viele Zeiger). Die Tests fanden jedoch unter Windows statt, sodass die PIC-Optimierung nicht bewertet wurde.

Beachten Sie, dass die meisten JIT-VM-Sprachen (Java, .NET) im Durchschnitt (intern) wesentlich mehr Zeiger verwenden als beispielsweise C ++. Wahrscheinlich steigt der Speicherverbrauch mehr als bei einem durchschnittlichen Programm, aber ich wage nicht, dies direkt mit verlangsamenden Effekten gleichzusetzen (da diese wirklich komplexen und funky Bestien sind und ohne Messung oft schwer vorhersagbar sind)

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

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

8

Abgesehen von den offensichtlichen Speicherplatzproblemen, die die meisten Leute hier erwähnen, ist es meiner Meinung nach wert, den Begriff "Broadword Computing" zu betrachten, über den Knuth (unter anderem) in letzter Zeit gesprochen hat. Durch die Bit-Manipulation lassen sich viele Effizienzgewinne erzielen, 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. Dies ist aus Performance-Sicht ein ziemlich großer Gewinn.

Werfen Sie einen Blick auf Band 4, vor dem Fascicle 1A, um einige Beispiele für die coolen Tricks zu sehen, über die ich spreche.

7
Kristof Provost

Neben der Möglichkeit, mehr Speicher zu adressieren, verfügt x86_64 auch über mehr Register, die es dem Compiler ermöglichen, effizienteren Code zu erzeugen. Die Leistungsverbesserung wird jedoch normalerweise ziemlich gering sein.

Die x86_64-Architektur ist mit x86 abwärtskompatibel. 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. Dies erfordert jedoch alle üblichen 32-Bit-Bibliotheken. Sie müssen möglicherweise separat installiert werden.

Mehr Register und eine neu gestaltete ABI (Passing-Funktion im Register) ist normalerweise eine Beschleunigung von 10 bis 15%, was ziemlich anständig ist. Es gibt jetzt eine x32-Linux-ABI mit 32-Bit-Zeigern, die jedoch den Modus "amd64 long" und args-in-register-Aufrufkonventionen verwenden. Sie haben also alle Geschwindigkeitsvorteile von amd64, ohne jedoch 64 Bit für jeden Zeiger zu benötigen. Es ist gut für alles, was nicht> 4 GB (virtuellen) Speicher benötigt. Peter Cordes vor 8 Jahren 0