stundenglas hat geschrieben:Dafür ist jedes Wort aber auch doppelt so groß. Wenn ein Programm also Speicher allociert benötigt es von diesen weniger da mehr zur Verfügung gestellt wird.
Hä? Was willst du damit sagen?
Okay, ich halte es mal ganz primitiv. So läuft es zwar in 64bit Prozessoren nicht, weil da ein Mischbetrieb gefahren wird, aber ich will einfach nur mal grundlegend das Problem verdeutlichen.
Nehmen wir an, wir hätten einen reinen 32bit Prozessor und einen reinen 64bit Prozessor.
Dann sind die Instruktionen im 32bit Prozessor 32 Bit breit und die Datenworte ebenfalls 32 Bit breit.
Für eine simple Addition von 1 und 2 werden im Speicher also 96 Bit benötigt, 32 Bit für den add-Befehl, 32 Bit für die 1 (Hex: 0x00000001, bin 00000000000000000000000000000001) und 32 Bit für die 2 (Hex: 0x00000002, bin 00000000000000000000000000000010). Man könnte jetzt ja sagen, dass man ja eigentlich nicht direkt die Zahlen addiert, sondern die in Zusammenhang mit dem Additionsbefehl die Speicheradressen angibt bla bla bla (was zu noch mehr Speicherverbrauch führen würde). Das wollen wir einfach mal der anschaulichkeitshalber lassen.
Für einen simplen add-Befehl in eine reinen 64bit Prozessor bräuchte man hingegen 192bit, 64 Bit für die Instruktion, 64 Bit für die 1 (hex: 0x0000000000000001, bin 0000000000000000000000000000000000000000000000000000000000000001) und 64 Bit für die 2 (hex: 0x0000000000000002, bin 0000000000000000000000000000000000000000000000000000000000000010).
Für diese simple Addition würde man also exakt, wen wundert es, doppelt so viel Speicher benötigen, was zur Folge hat, dass in einer reinen 64bit-Prozessor-Umgebung 8 GB-RAM 4 GB-RAM in einer reinen 32bit-Prozessor-Umgebung entsprechen.
So, ich gebe jetzt aber an dieser Stelle ein paar konstruierte Voraussetzungen zu. Zum einen ist das Beispiel natürlich so gewählt, dass der reine 64bit-Prozessor schlechter bei weg kommt, da wir mit kleinen Zahlen rechnen. Das ist nicht ganz aus der Welt, weil wir üblicherweise mit Zahlen rechnen, die weit unter 4 Milliarden und ein paar Zerquetschten liegen, aber schon, wenn wir an die Berechnung von Gleitkommazahlen gehen, sieht die Welt wieder ganz anders aus.
Der Vorteil von 64bit System ist eben, dass sie mit einer Instruktion Rechnungen auf 64bit Datenworten ausführen können.
Nochmal am Beispiel add. Wenn wir auf fünf Milliarden sechs Milliarden addieren wollen, so werden hierfür in 32bit-Prozessor-Umgebungen mindestens zwei Instruktionsen benötigt. Einmal die Addition des unteren Teils und einmal die Addition des oberen Wortteils (fünf und sechs Miliarden passen nicht in 32 bit). Vom Übertrag und der Verwaltung drum rum ganz zu schweigen.
In reinen 64bit-Prozessorsystemen ist hierfür nach wie vor nur eine Instruktion nötig.
Und genau das ist der große Vorteil. 64bit-Systeme benötigen zwar für kleine Zahlen mehr Speicher, aber der Speicher ist ja vorhanden. (Wer hätte vor 15 Jahren an 4 GB RAM gedacht??? Ich war mit meinen 32 MB überglücklich) Dafür kann man Rechenoperationen auf großen Zahlen wesentlich schneller durchführen, da der Prozessor das ganze Datum verarbeiten kann.
Soviel zu reinen Prozessoren.
Jetzt müssen wir aber feststellen, dass wir keine reinen 32bit oder 64bit Prozessoren und Systeme haben. Wir haben einen Mischmasch.
(Fast) Jeder 64bit-Prozessor kennt heute 32bit Instruktionen und 32bit Datentypen, hat spezielle Operationsmodi oder zumindest einen 32bit-Coprozessor. Das gab es auch schon bei 32bit Prozessoren, wo durchaus 16bit Instruktionen und Datentypen verwendet wurden.
Das von mir angesprochene Problem wird damit zwar angegangen aber nicht grundlegend gelöst. Man geht heute von etwa einem drittel Datenverschnitt bei 64bit-Architekturen aus, allein wegen der Wort- und Instruktionsbreite. Sprich, wenn ich 6 GB verbaut habe, dann habe ich eigentlich nur vier verglichen mit einem 32bit System. Allerdings hast Du natürlich insofern recht, als dass ich nie im Leben mehr als 4 GB in einem 32bit System adressieren kann, wohingegen in einem 64bit System prinzipiell 16 EB (Exabyte) adressierbar sind. Das sind 16.777.216 TB(!!!). Also erst einmal ausreichend. Aber das haben wir vor 15 Jahren auch gedacht

.
Genau genommen sind es nach SI natürlich 16 EiB(Exbibyte) und 16.777.216 TiB(Tibibyte) aber ich streube mich ein wenig gegen die SI-Vereinnahmung von den ehemals binären Größen KB, MB, GB, TB, PB, EB, ... da die meiner Meinung rein marktwirtschaftlich motiviert ist.