Ich fing an, etwas über Zeiger in C++ zu lernen, und dachte mir, ich sollte mich ein wenig darüber informieren, wie Speicher funktioniert und wie auf sie zugegriffen wird. Ich habe gelesen, dass, wenn wir sagen, dass ein Prozessor 64-Bit ist, er ein 64-Bit-Register hat und auf 2^64 Adressstellen zugreifen kann. Ich habe auch gelesen, dass es 64/8 abrufen kann, also 8 Bytes Daten gleichzeitig, aber der Datenbus ist nicht dasselbe wie das Register, oder? Müssen sie die gleiche Größe haben oder ist das einfach der Fall? Und ist es die Größe des Registers oder die Größe des Datenbusses, die bestimmt, wie wir es bezeichnen, z. B. 32/64-Bit? Gibt es auch einen Unterschied zwischen Registergröße und Adressgröße?
Wenn Sie sich auf 64-Bit oder 32-Bit beziehen, muss dies nicht nur eine Registerbreite oder Busbreite bedeuten. Sie können einen Bus so multiplexen, dass er 64 Bit in zwei Lesevorgängen oder vier Lesevorgängen usw. liest. Ein CPU-Design kann so kreativ sein wie der Ingenieur hinter den Logikblöcken. Ein gutes Beispiel ist der 8086 mit 20 Bit Adressraum und 16 Bit Datenbus. Die Software, die Sie in C++ schreiben, umschließt viele Schichten von Kompilierungs- und Hardware-Zustandsmaschinen, sodass diese abstrahiert werden. Beim RISC-Design werden Sie feststellen, dass Registerbreite und ALU-Breite fast immer gleich breit sind, aber beim CISC-Design muss dies nicht so sehr der Fall sein.
Die Breite des Prozessors wird durch die Breite der Register im Inneren definiert. Die ALU kann die Register direkt verarbeiten. Die Datenbusbreite und die Adresskapazität definieren selten die Prozessorbits.
PS: Ein 32-Bit-Compiler und ein 64-Bit-Compiler liefern auf einer 64-Bit-Maschine unterschiedliche Ergebnisse.
Ignacio Vazquez-Abrams
Samuel