Wie ist die Wortgröße oft gleich der Zeigergröße?

696
radhika

Ein Zeiger speichert eine Speicheradresse, daher ist seine Größe die Größe einer Speicheradresse, die von keiner Speicherstelle abhängt. Auf der anderen Seite ist die Wortgröße die größte Einheit, auf die ein Befehl angewendet werden kann. Die Größe eines Speicherplatzes ist daher irrelevant, da mehrere gleichzeitig erfasst werden können. Welcher Zusammenhang besteht also zwischen der Wortgröße und der Zeigergröße?

-1
"Wortgröße ist die größte Einheit" - Dies ist falsch. Ein Zeiger kann 32 Bit oder 64 Bit sein, je nach Adressgröße. Eine Anweisung kann abhängig von der Anweisung unterschiedliche Byte-Größen akzeptieren, weshalb es 32-Bit- und 64-Bit-Anweisungen gibt. * Dieser Kommentar wurde zur Vereinfachung des Schreibens vereinfacht * Ramhound vor 7 Jahren 0
Bitte überprüfen Sie die zweite Antwort unter http://cs.stackexchange.com/questions/48425/isword-size-the-size-of-a-memory-location-the-size-of-the-data-bus-or- die-cp radhika vor 7 Jahren 0
@radhika Wer hat dir gesagt, dass "Word-Größe die größte Einheit ist"? Wie wäre es mit Long oder Longlong? Wenn Sie einen Blick auf diese [Tabelle] (https://en.wikipedia.org/wiki/Word_ (computer_architecture) #Table_of_word_sizes) werfen, würden Sie sich wundern, dass die Wortgröße in Bezug auf die Größe am unzuverlässigsten ist. Die CPU-Architektur war davon abhängig Alex vor 7 Jahren 0
"Aber derselbe Computer kann möglicherweise mit Bytes, 16-Bit-Wörtern und 32-Bit-Langwörtern arbeiten." - Diese Aussage ist korrekt, die andere ist NICHT zu 100% und der Ingenieur hat die Details zu beachten. Die gesamte Antwort, mit der Sie verlinkt haben, ist nicht ganz genau. Wenn ich einen Downvote abgeben könnte, würde ich dies tun, weil ich zahlreiche Aussagen sehe, die einfach nur ungenau sind. ARM und x86 sind im Grunde die Welt der Computerarchitektur, und beide unterstützen je nach Prozessor unterschiedliche Wortgrößen. Ramhound vor 7 Jahren 0

3 Antworten auf die Frage

2
Ben Voigt

Sie müssen nicht gleich sein, und die Anzahl der Computersysteme, bei denen sie nicht weit über denen liegen, wo sie sich befinden. Dennoch gibt es einige Beziehungen zwischen der Zeigergröße und der "Wortgröße".

Programme führen eine Menge Zeigerarithmetik durch. Array-Subskription ist ein Zeigerzusatz. Zeiger werden miteinander verglichen. Wenn Ihre CPU keine Arithmetik für etwas von der Größe eines Zeigers ausführen kann, muss Ihre Adresse auf mehrere Variablen aufgeteilt werden, was zu einem segmentierten oder überlasteten Adressraum führt. Diese sind kompliziert zu verwalten und verursachen die Verbreitung von zeigerartigen Typen (Nahzeiger, Fernzeiger, basierter Zeiger). Als Folge davon erhalten Sie zusätzliche seltsame Einschränkungen, z. B. verknüpfte Listen, die mehr Elemente aufnehmen können als ein Array.

Mikrocontroller mit 8-Bit-Datenbussen und größeren Adressräumen (vielleicht nur für Code und nicht für Daten) sind jedoch üblich. In der anderen Richtung weisen moderne Universal-CPUs mit 32-Bit- oder 64-Bit-Zeigern wesentlich breitere Datenwörter als Zeiger auf (z. B. 512-Bit-Datenwörter im AVX-Subsystem moderner x86_64-CPUs). Viele Lock-Free-Algorithmen hängen vom atomaren Zugriff auf Daten ab, die mindestens doppelt so groß sind wie ein Zeiger.

Die Wortgröße ist die maximale Anzahl von Bits, die der Prozessor gleichzeitig ausführen kann. Dies impliziert, dass ALU-Größe und Wortgröße gleich sind. Daher ist die Wortgröße als Architektur definiert. Korrigieren Sie mich bitte, wenn ich falsch liege. radhika vor 7 Jahren 0
Wenn ich über die Größe des Speicherdatenregisters und die Größe des Datenbusses spreche, sind diese dann gleich oder verschieden? radhika vor 7 Jahren 0
1
jiggunjer

TLDR: Wahrscheinlich Zufall.

Ein Zeiger ist an sich nicht Teil der Computerarchitektur, er ist eine Programmiersprachenfunktion. Beispielsweise definiert die Windows-API ihre eigenen Zeigertypen und deren Größe. In C unter Windows char*variiert ein Zeiger auf ein Zeichen ( ) je nach Version zwischen 32 und 64 Bit. Die Größe eines Wortes hat vielleicht wenig damit zu tun.

Wort ist ein sehr überladenes Wort. In der CPU-Architektur kann sich ein Wort auf die Größe eines Befehls, des Datenbusses, des Speicherbusses usw. beziehen. In der Windows-API ist ein Wort ein vorzeichenloser Kurzschluss, dh mindestens 2 Byte, und hängt daher davon ab, wie Kurzschlüsse implementiert werden.

Es kann eine Korrelation zwischen MS-Wörtern und Wörtern in Anweisungsgröße geben, aber ich denke, dass Sie einen OS-Entwickler benötigen, um darüber zu debattieren, und ich bezweifle, dass dies die Größe der Zeiger beeinflusst.

0
DrMoishe Pippik

Zu einem Zeitpunkt waren Computerregister und interne Busse von 4-Bit, 8-Bit, dann 16-Bit, 32-Bit und derzeit 64-Bit gewechselt. Die maximale Adressraum ist abhängig von der Größe eines Zeigers (obwohl einige frühe CPUs, zB Z80A, könnte Seite Speicher in Blöcken der Größe eines Zeigers).

Wenn Busse breiter wurden, war es auch wünschenswert, den RAM-Speicher zu erhöhen, so dass auch die Größe eines Zeigers zunahm. Manchmal konnte das Betriebssystem jedoch nicht mit dem größeren Bus mithalten, z. B. beim Übergang von Windows 7 (32 Bit) auf 64 Bit, der maximal adressierbare Arbeitsspeicher wurde zunächst von 4 GB auf 8 GB und schließlich auf 192 GB am High-End verschoben Versionen.

Die Größe der Register und des Busses (von einem Halbbyte zu einem Byte, dann einem Word, dann einem DWORD in einem MS-16-Bit-Betriebssystem usw.) stieg willkürlich an, ebenso wie der Adressraum. Eine ausführlichere Erklärung finden Sie unter @DarkDust.

32-Bit-Versionen von Windows hätten mehr als 4 GB pro Prozess adressieren können, aber zu diesem Zeitpunkt gab es weder kommerzielle Hardware noch Software, die die Entwicklungskosten rechtfertigte. Linux, das praktisch keine Entwicklungskosten hatte, konnte seine nahezu unbegrenzten Entwicklungszeiten für Menschen ausnutzen. Was hat die Größe eines Speicherregisters in der CPU-Architektur mit physischem Systemspeicher zu tun? Ramhound vor 7 Jahren 0
Das ist nicht der Fall: Es war einfach eine willkürliche Entscheidung, die Zeigergröße zu erhöhen, um mehr RAM ansprechen zu können. DrMoishe Pippik vor 7 Jahren 0
Der Bedarf an größeren Variablentypen bestand darin, dass die Prozessoren, die diese Fähigkeit aufweisen, richtig angegeben sind. Ohne die entsprechenden Anweisungen gäbe es sie nicht, da sie nicht manipuliert werden könnten (addieren, subtrahieren). Wieder hat die Zeigergröße wenig mit RAM, virtuellem Speicher und Seitendateien gelöst, viele Probleme gelöst, aber die Adressierung von 2 GB vs. 128 GB hatte nichts mit den eingeführten Anweisungen zu tun. Ihre Antwort hat jedoch Potenzial Ramhound vor 7 Jahren 0
Die Frage bezog sich auf die Größe eines * Zeigers *, der zum Adressieren des Speicherplatzes verwendet wird, und warum er mit zunehmender Registerbreite ebenfalls vergrößert wurde. Wieder war es eine willkürliche Entscheidung, größere Programme und Datensätze ohne Paging zuzulassen. DrMoishe Pippik vor 7 Jahren 0
Was ist also im Allgemeinen der signifikante Unterschied zwischen Wortgröße, Datenbusbreite, Zeigergröße und Speicherplatzbreite? radhika vor 7 Jahren 0
Word wird durch die Programmiersprache definiert, dh es kann eine beliebige Größe haben. Der Datenbus wird von der CPU-Architektur bestimmt. Die Größe des Zeigers hängt vom verwendeten Adressregister ab. Die Breite des verwendeten Speichers ist keine Sache oder die Verwendung der falschen Terminologie. Ramhound vor 7 Jahren 0
Ein * Zeiger * ist der bestimmende Faktor, der die Größe des Adressraums steuert, und wird normalerweise für jedes Betriebssystem festgelegt. (Interne) Busbreite und Registergröße werden von der CPU festgelegt und steuern, wie groß ein "Chunk" von Daten in einem CPU-Zyklus verarbeitet wird. Die Größe der Variablen ist beliebig und innerhalb eines Programms kann eine Variable ein einzelnes Byte sein (Booleans, obwohl theoretisch ein Bit, für die einfache Adressierung tatsächlich ein ganzes Byte verbraucht. Wie umständlich!), Ein DWORD oder ein Multibyte (wie in Punktnummern). DrMoishe Pippik vor 7 Jahren 1
@Ramhound, ich sprach eigentlich über die Breite des Speicherplatzes. Übrigens, ich habe alle oben genannten Punkte verstanden, aber ich bin etwas verwirrt mit der eigentlichen Terminologie eines kleinen Mikrocontrollers. Man sagt, dass n Bits die Größe von angeben ALU, die im Prozessor verwendet wird, also ist die Datenbusbreite ebenfalls n Bits, kann sie kleiner oder größer als n Bit sein. Außerdem ist die Wortgröße die maximale Anzahl von Bits, die der Prozessor gleichzeitig ausführen kann. Dies impliziert diese ALU Größe und Wortgröße sind gleich und daher ist Wortgröße die Architektur definiert. Bitte korrigieren Sie mich, falls ich falsch liege. radhika vor 7 Jahren 0
Denken Sie daran, dass Sie die Anweisung dekodieren müssen. Dieses Ergebnis bestimmt, welche ALU-Operation ausgeführt wird. Ich habe noch nie von "Breite des Speicherplatzes" gehört. Die Ergebnisse einer Anweisung werden in eines der Prozessorregister übernommen. Abhängig von der Anweisung wird eine bestimmte Registergröße verwendet, so dass "Breite des Speicherplatzes" keinen Sinn hat oder eine ungerade Terminologie ist Ramhound vor 7 Jahren 0
In diesem Fall verfügt der x86-Prozessor über 128-Bit-, 256-Bit- und 512-Bit-Register. Diese können QuadWord-Operationen unterstützen. All dies wird von Intel dokumentiert. Ramhound vor 7 Jahren 0
Die Breite des Speicherplatzes impliziert die Größe des Speicherplatzes. radhika vor 7 Jahren 0
Wie Sie gesagt haben, dass das Ergebnis von ALU in einem der Prozessorregister abgelegt wird, bedeutet dies, dass die Größe des Datenbusses und die Größe der internen Register gleich sein müssen. Ist es richtig? radhika vor 7 Jahren 0
@Ramhound, Nachdem ich mehr über Wortgröße und Datenbusgröße gelesen habe, bin ich etwas verwirrt bezüglich der universellen Definition eines Wortes. Bitte erläutern Sie es kurz. Ich habe Wikipedia durchgegangen und sagt: "Ein Wort ist ein Stück mit fester Größe Daten werden vom Befehlssatz oder von der Hardware des Prozessors als Einheit behandelt ", bedeutet dies, dass die Größe der Speicherdatenregister und die Wortgröße gleich sind, dh 32-Bit-Mikrocontroller = 32-Bit-Wort. Ist diese Terminologie in Ordnung? radhika vor 7 Jahren 0
@radhika: Das ist ein Kandidat, der aber nicht allgemein verfolgt wird. Das Windows-Typedef "WORD" ist beispielsweise 16-Bit, wobei "DWORD" "Doppelwort" und "QWORD" Quadwort bedeutet ... und Microsoft hat diese Namensgebung nicht erfunden, einige Anweisungen in x86 und andere Architekturen haben "B", "W", "D" oder "Q", die die Operationsbreite von 8, 16, 32 oder 64 Bit angeben. Ben Voigt vor 7 Jahren 0
Wenn ich über die Größe des Speicherdatenregisters und die Größe des Datenbusses spreche, sind sie dann gleich oder verschieden? radhika vor 7 Jahren 0
@radhika Warum redest du davon? Es gibt eine endliche Anzahl von Registern, deren "Größe" bestimmt wird, von welchem ​​Register sie tatsächlich sind. Ramhound vor 7 Jahren 0