Der Unterschied zwischen 32-Bit-Software und 64-Bit-Software ist die Größe der Zeiger und möglicherweise die Größe der Ganzzahlregister. Das ist es.
Das bedeutet, dass alle Zeiger in Ihrem Programm doppelt so groß sind. Und (zumindest auf einer ILP32 / LP64-Architektur) sind Ihre long
s auch doppelt so groß. Dies führt normalerweise zu einer Erhöhung der Objektcodegröße um ca. 30%. Das bedeutet, dass …
- Ihr Objektcode benötigt ca. 30% länger, um von der Festplatte in den RAM zu laden
- Ihr Objektcode belegt ca. 30% mehr Speicherplatz
- Sie haben Ihre Speicherbandbreite (für Objektcode) effektiv um ~ 20% gesenkt
- Sie haben die Größe des Anweisungscaches effektiv um ~ 20% verringert.
Dies hat einen nicht zu vernachlässigenden negativen Einfluss auf die Leistung.
Dies zu tun, macht nur Sinn, wenn Sie diese Leistungskosten irgendwie "zurückkaufen" können. Grundsätzlich gibt es zwei Möglichkeiten, dies zu tun: Sie führen eine Menge 64-Bit-Ganzzahlberechnungen durch, oder Sie benötigen mehr als 4 GiByte abgebildeten Speicher. Wenn eines oder beide zutreffen, ist es sinnvoll, 64-Bit-Software zu verwenden, andernfalls ist dies nicht der Fall.
Hinweis: In einigen Architekturen gibt es keine entsprechenden 32- oder 64-Bit-Varianten. In diesem Fall ergibt die Frage offensichtlich keinen Sinn. Die bekanntesten sind IA64 (nur 64-Bit und keine 32-Bit-Variante) und x86 / AMD64 (wenn auch eng verwandt) mit unterschiedlichen Architekturen, wobei x86 nur 32-Bit und AMD64 nur 64-Bit ist.
Tatsächlich ist diese letztere Aussage nicht mehr zu 100% wahr. Linux hat kürzlich das x32-ABI hinzugefügt, mit dem Sie AMD64-Code mit 32-Bit-Zeigern ausführen können. Auch wenn dies keine "richtige" CPU-Architektur ist, können Sie die AMD64-Architektur so verwenden, als ob sie eine native wäre 32-Bit-Variante. Dies geschah genau deshalb, weil der oben erwähnte Leistungsaufwand reale messbare und quantifizierbare Probleme für reale Benutzer verursachte, die realen Code in realen Systemen ausführen.