Wie ist die Wortgröße oft identisch mit der Zeigergröße?

Wie ist die Wortgröße oft identisch mit der Zeigergröße?

Ein Zeiger speichert eine Speicheradresse, seine Größe ist also die Größe einer Speicheradresse, die von der Anzahl der Speicherorte abhängt. Andererseits ist die Wortgröße die größte Einheit, auf der ein Befehl arbeiten kann/arbeitet. Die Größe eines Speicherorts ist also irrelevant, da mehrere gleichzeitig erfasst werden können. Welche Beziehung besteht also zwischen Wortgröße und Zeigergröße?

Antwort1

Sie müssen nicht gleich sein, und die Anzahl der Computersysteme, auf denen sie nicht vorhanden sind, übersteigt bei weitem die Anzahl der Computersysteme, auf denen sie vorhanden sind. Dennoch gibt es einige Beziehungen zwischen Zeigergröße und „Wort“-Größe.

Programme führen VIEL Zeigerarithmetik aus. Array-Indizierung ist Zeigeraddition. Zeiger werden miteinander verglichen. Wenn Ihre CPU keine Arithmetik mit etwas in der Größe eines Zeigers durchführen kann, muss Ihre Adresse auf mehrere Variablen aufgeteilt werden, was zu einem segmentierten oder gebündelten Adressraum führt. Diese sind kompliziert zu verwalten und führen zu einer Verbreitung von zeigerähnlichen Typen (Nahzeiger, Fernzeiger, Basiszeiger). Als Folge davon ergeben sich zusätzliche seltsame Einschränkungen, z. B. dass verknüpfte Listen mehr Elemente enthalten können als ein Array.

Dennoch sind Mikrocontroller mit 8-Bit-Datenbussen und größeren Adressräumen (vielleicht nur für Code und nicht für Daten) weit verbreitet. Umgekehrt haben moderne Allzweck-CPUs mit 32-Bit- oder 64-Bit-Zeigern viel breitere Datenwörter als Zeiger (z. B. 512-Bit-Datenwörter im AVX-Subsystem moderner x86_64-CPUs). Viele lock-freie Algorithmen hängen vom atomaren Zugriff auf Daten ab, die mindestens doppelt so groß sind wie ein Zeiger.

Antwort2

TLDR: Wahrscheinlich Zufall.

Ein Zeiger ist nicht per se Teil der Computerarchitektur, sondern eine Funktion der Programmiersprache. Beispielsweise definiert die Windows-API ihre eigenen Zeigertypen und deren Größe. In C unter Windows char*variiert ein Zeiger auf ein char () je nach Version zwischen 32 und 64 Bit. Die Größe eines Wortes hat damit möglicherweise wenig zu tun.

Wortist ein sehr überladenes Wort, ähm, Begriff. In der CPU-Architektur kann sich ein Wort auf die Größe einer Anweisung, den Datenbus, den Speicherbus usw. beziehen. In derWindows-APIein Wort ist ein vorzeichenloser Short, d.h.mindestens2 Bytes und hängt daher davon ab, wie Shorts implementiert werden.

Möglicherweise besteht ein Zusammenhang zwischen MS-Wörtern und Wörtern in Befehlsgröße, aber ich glaube, um das mit einem Betriebssystementwickler zu besprechen, und ich bezweifle, dass es Auswirkungen auf die Zeigergröße hat.

Antwort3

Computerregister und interne Busse waren einst von 4-Bit auf 8-Bit, dann 16-Bit, 32-Bit und derzeit 64-Bit ausgelegt. Der maximale Adressraum hängt von der Größe eines Zeigers ab (obwohl einige frühe CPUs, z. B. Z80A,SeiteSpeicher in Blöcken von der Größe eines Zeigers).

Da die Busse breiter wurden, war es auch wünschenswert, den RAM zu vergrößern, sodass 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 wurde der maximal adressierbare Arbeitsspeicher zunächst von 4 GB auf 8 GB und schließlich auf 192 GB bei den High-End-Versionen verringert.

Daher nahm die Größe der Register und des Busses (von einem Nibble zu einem Byte, dann einem Wort, dann einem DWORD im MS 16-Bit-Betriebssystem usw.) beliebig zu, ebenso wie der Adressraum.Eine ausführlichere Erklärung ist bei @DarkDust verfügbar.

verwandte Informationen